【发布时间】:2014-03-15 09:17:08
【问题描述】:
如何使用 Unix sed 命令将字符或表达式替换为换行符?
(对于字符替换,我通常使用tr ';' "\n" 命令。)
【问题讨论】:
如何使用 Unix sed 命令将字符或表达式替换为换行符?
(对于字符替换,我通常使用tr ';' "\n" 命令。)
【问题讨论】:
使用 Sed 将 ; 字符(分号)替换为换行符:
sed "s/;/\\
/g"
或
sed "s/;/\\$(echo -e '\n')/g"
使用 Sed 将 [^A-Za-z] 表达式(除字母字符外的任何字符)替换为换行符:
sed "s/[^A-Za-z]/\\
/g"
或
sed "s/[^A-Za-z]/\\$(echo -e '\n')/g"
【讨论】:
sed 's/;/\n/g' <<< "a;b;c;d;e"
\r\n而不是\n\r吗?它肯定在 Windows/DOS 上;当然,在 Unix 上,它只是 \n。
\r\n,或者只是 \n。顺便说一句,我正在运行 Linux 和 Mac OS X。 @Lynch 正确,sed 's/;/\n/g' 在 Linux Sed 4.2.1 上运行正常,但在 BSD Sed 上无法运行。
bash,您可以使用ANSI-C Quoting 和sed $'s/;/\\\n/g' 将分号替换为换行符。双反斜杠生成一个转义以下换行符的反斜杠。您也可以将论点分成两行——但这很难在评论中显示。 (在带有 BSD sed 的 Mac OS X 10.9.1 Mavericks 上测试。)
怎么样:
sed $'s/;/\\\n/g' inputFile
$ cat inputFile
this;is;a;text
$ sed $'s/;/\\\n/g' inputFile
this
is
a
text
【讨论】:
在文字换行符之前的反斜杠是在 sed 中获取换行符的可移植方式:
$ echo "a,b" | sed 's/,/\
/'
a
b
【讨论】:
这可能对你有用(GNU sed 和 Bash):
sed 'y/;/\n/' file
或
sed $'y/;/\\n/' file
或者非常复杂:
sed -e 'G' -e ':a' -e 's/\(;\)\(.*\(.\)\)/\3\2/' -e 'ta' -e 's/.$//' file
【讨论】: