是sed -e 'script' -e 'script'
相同的sed "script;script"
?
此外,这些多个命令是否在一次文件扫描期间运行?或者您放置的脚本越多,它对文件执行的扫描/传递次数就越多? (每个脚本一个)
由于 sed 是一种脚本语言,我倾向于多重传递理论...例如,如果您有sed "script;script"
这样的脚本,就像有这样的 sed 脚本:
script
script
因此,很自然地假设一切都是按程序发生的。
但又如何呢-e 'script' -e 'script'
?
最重要的是,有没有一种方法可以告诉 sed 仅执行一次,从而在大文件上节省宝贵的 CPU 周期?如果 sed 不能做到这一点,还有其他方法可以做这样的事情吗? (也许 awk 更合适?等等)
感谢您抽出时间提供帮助
答案1
对于每一行输入,每个表达式/脚本都会依次应用到它。命令
sed -e 's/apple/orange/g' -e 's/orange/red/g'
将替换所有出现的字符串
apple
和orange
与字符串red
。只有一趟通过输入数据。
sed
处理流,它是一个流编辑器毕竟,输入流甚至不必是可查找的。
你举的例子,
sed -e "script1" -e "script2"
是相同的
sed "script1;script2"
这与以下相同
sed -f file1 -f file2
其中file1
containsscript1
和file2
contains script2
,这与
sed -f file
其中file
包含
script1
script2
或者
script1;script2
是否sed
适合您的任务完全取决于任务。就像 一样sed
,awk
不需要多次解析文件或输入流。有些任务更适合awk
,尤其是那些需要聚合数据的任务。
sed
是一个编辑器,awk
相比之下更多的是一种文本处理语言。