这个 sed 命令中转义的换行符有什么问题?

这个 sed 命令中转义的换行符有什么问题?

我正在尝试使用 sed 在每行后面添加行text += num.toString(16);

我的做法是:Replace every new line with a new line, plus text += num.toString(16);。那是:

sed 's/\
/\
text \+= num\.toString\(16\);/g'

但我无法让这个工作。我unterminated substitute pattern从 sed获取。

这里有什么问题吗?

我正在使用 BSD sed。

答案1

你不能使用:

s/\
/

匹配s/pattern/replacement/表单中模式空间中的换行符。这取决于解释该模式的实现。 GNU sed 和 BSD sed 都将其视为字面换行符,但 BSD sed不接受会引发错误

通常,您不能匹配输入行末尾的换行符,但您可以用来\n匹配作为命令结果出现在模式空间中的换行符N

正确的方式,POSIXLY:

sed 'a\
text += num.toString(16);
'

或者:

sed 's/$/\
text += num.toString(16);/'

答案2

同样适用于awk以下方式:

awk '{print $0"\ntext += num.toString(16);"}' file

在这种情况下,将按原样打印每一行,然后在新行中 awk打印。text += num.toString(16);

相关内容