需要解析以下sed命令:sed -e' s / / \' $' \ n / g'

时间:2018-04-23 22:55:10

标签: sed

我偶然发现了sed -e 's/ /\'$'\n/g'命令,该命令应该接受输入并将所有空格分成新行。尽管如此,我还没有完全了解'$'在命令中的工作方式。我知道s代表替代,/ /代表空格,\n代表新行,/g代表全局替换,但不确定{{1}适合图片。任何能够在这里发光的人都会非常感激。

1 个答案:

答案 0 :(得分:5)

基本上它意味着平台的可移植性。使用GNU sed,它只是

sed -e 's/ /\n/g'

因为GNU sed能够将\n解释为新行。

但是,其他版本的sed,如BSD版本(MacOS附带)不会将\n解释为换行符。

这就是为什么命令是由两部分构建的

sed -e 's/ /\' part2: $'\n/g'

$'\n/g'是在执行sed之前由shell解析的ANSI C字符串。像\n这样的转义序列会在这些字符串中得到扩展。这样做,该命令的作者将一个文字新行(0xa)传递给sed命令,而不是传递转义序列\n。 (0x5c 0x6e)。

还有一件事,因为换行符(0xa)是sed中的命令分隔符,所以需要进行转义。这就是第一部分结束时的原因。

或者您可以使用多行版本:

sed -e 's/ /\
/g'
是的,我会像

那样编写命令
sed -e 's/ /\'$'\n''/g'

意味着只需将$'\n'放入ANSI C字符串即可。 Imo更好理解。