我无意中发现了命令 sed -e 's//\'$'\n/g'
,据说该命令接受输入并将所有空格拆分为新行。不过,我不太明白 '$'
在命令中是如何工作的。我知道 s
代表替换,//
代表空格,\n
代表换行,/g
用于全局替换,但不确定 \'$'
如何适合图片。任何能在这里阐明一些问题的人都将不胜感激。
最佳答案
基本上它是为了平台可移植性。使用 GNU sed 就可以了
sed -e 's/ /\n/g'
因为 GNU sed 能够将 \n
解释为新行。
但是,其他版本的 sed,如 BSD 版本(MacOS 附带)不会将 \n
解释为换行符。
这就是为什么命令由两部分组成
sed -e 's/ /\' part2: $'\n/g'
$'\n/g'
是一个 ANSI C在执行 sed 之前由 shell 解析的字符串。像 \n
这样的转义序列将在这样的字符串中得到扩展。这样做,命令的作者向 sed 命令传递了一个文字换行符 (0xa
),而不是传递转义序列 \n
。 (0x5c 0x6e
)。
还有一件事,因为换行符 (0xa
) 是 sed 中的命令分隔符,所以需要对其进行转义。这就是第一部分末尾的\的原因。
或者你可以只使用多行版本:
sed -e 's/ /\
/g'
顺便说一句,我会写这样的命令
sed -e 's/ /\'$'\n''/g'
意思是将 $'\n'
放入 ANSI C 字符串中。我觉得这样更好理解。
关于sed - 需要解析如下sed命令 : sed -e 's//\' $'\n/g' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49991035/