在 POSIX shell 中使用while 循环来处理文本通常被认为是不好的做法吗?
正如Stéphane Chazelas 所指出的,不使用 shell 循环的一些原因是概念、可靠性、易读性、性能和安全性。
这个答案解释了可靠性和易读性方面:
while IFS= read -r line <&3; do
printf '%s\n' "$line"
done 3< "$InputFile"
Run Code Online (Sandbox Code Playgroud)
为了性能,从文件或管道读取时,while
循环和读取非常慢,因为内置的read shell一次读取一个字符。
怎么样的概念和安全性方面?
sed 和换行符有问题吗?
我有一个包含以下内容的文件 test.txt
aaaaa
bbbbb
ccccc
ddddd
Run Code Online (Sandbox Code Playgroud)
以下不起作用:
sed -r -i 's/\n/,/g' test.txt
我知道我可以使用tr
它,但我的问题是为什么 sed 似乎不可能。
如果这是逐行处理文件的副作用,我会对为什么会发生这种情况感兴趣。我认为grep
删除新行。sed 也一样吗?