3

我正在尝试但能够理解sed. 为什么我们需要它,它的目的是什么?

在这个\n从文件中删除的解决方案中的示例,他使用:

sed ':a;N;$!ba;s/\n/ /g'

我无法理解标签。

4

2 回答 2

4

这是一个简单的goto. 您需要在脚本末尾声明一个带有:label或不带标签的目标标签。b还有条件跳转tT.

在您的示例脚本中,“地址”条件$!对于除最后一行之外的所有行都为真($表示文件结尾,并!否定条件)。因此,有一个循环将整个文件读入模式空间,然后进入循环之后的操作,该操作替换所有(内部)换行符(在某些方言中sed)。

# declare label 'a'
:a
# append next input line to pattern space
N
# loop back to 'a' unless at end of file
$!ba
# substitute all newlines in pattern space
s/\n/ /g
# fall through to end: print the pattern space

我同意“分支”是一个有点误导性的术语,但它有很长的历史;更好的术语可能是“跳转”或“转到”。

于 2013-01-08T06:19:12.073 回答
2

sed关于分支出现在答案中的位置有很多问题,包括:

我敢肯定还有很多其他人。

于 2013-01-08T06:45:22.163 回答