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

标签 sed

我无意中发现了命令 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/

相关文章:

regex - 如何使用 sed 流编辑器编写美元符号 ($)

awk - 如何使用 SED 编辑 Linux 文件中的特殊字符?

linux - 如何在 sed 中的给定行下方插入多行且行包含斜杠

regex - 如何在 Ubuntu 中使用 bash 反转文件中的所有单词?

shell - 谁能解释一下这个shell语句的含义吗?

regex - 逐行解析文件中的关键字符并复制行

shell - sed中p和P有什么区别?

sed - 在 sed 中操作 & 符号

php - 通过 php shell_exec 执行 bash 脚本的权限错误

regex - 使用sed在行首和行尾添加引号