我想使用 tr
命令将字符串 " n
" 的所有出现替换为新行 ( n
)。
我尝试了tr '\n' 'n'
但这似乎与任何""和任何"
n
"相匹配
以下是使用 sed
的方法:
sed 's/\n/n/g'
用法示例:
就地替换文件中出现的所有n
:
sed -i 's/\n/n/g' input_filename
替换通过管道出现的所有n
,并保存到另一个文件中
cat file1 file2 file3 file4 | sed 's/\n/n/g' > output_file
Perl 解决方案类似于 sampson-chen 的 sed 解决方案:
perl -pe 's/\n/n/g'
例子:
带有文本 (不是换行符)的输入文件:
$ cat test1.txt
foonbarnnbaz
用实际换行符替换所有出现的n
,打印成STDOUT
:
$ perl -pe 's/\n/n/g' test1.txt
foo
bar
baz
同样,就地更改输入文件,将备份保存到test1.txt.bak
:
$ perl -i.bak -pe 's/\n/n/g' test1.txt
Perl 单行代码使用这些命令行标志:
-e
:告诉Perl在内联中查找代码,而不是在file.
中查找代码 -p
:一次循环一行输入,默认情况下将其分配给$_
。在每次循环迭代后添加print $_
.
-i.bak
:就地编辑输入文件(覆盖输入文件)。在覆盖之前,通过将扩展名.bak
附加到原始文件的名称来保存原始文件的备份副本。
另请参阅:
perldoc perlrun
:如何执行Perl解释器:命令行开关
perldoc perlre
: Perl 正则表达式 (正则表达式)
我有一个类似的问题,我想在 Mac BigSur 上用新行替换""
输入:
-----BEGIN CERTIFICATE-----\nMIGcz......naLRn\nyxiJdo=\n-----END CERTIFICATE-----
预期产出:
-----BEGIN CERTIFICATE-----
MIGcz......
aLRn
yxiJdo=
-----END CERTIFICATE-----
Sed,perl没有为我工作。但是一个简单的"tr"命令很有用。
echo -----BEGIN CERTIFICATE-----\nMIGcz......\naLRn\nyxiJdo=\n-----END CERTIFICATE----- | tr '' 'n'