【发布时间】:2010-11-17 00:04:04
【问题描述】:
我需要在目录中数百个文件的第二行插入一行带有特定文本的行(从而将文件中的其他行向下移动)。关于如何做到这一点的任何快速 Unix 提示?
【问题讨论】:
我需要在目录中数百个文件的第二行插入一行带有特定文本的行(从而将文件中的其他行向下移动)。关于如何做到这一点的任何快速 Unix 提示?
【问题讨论】:
sed -i -e '2iYour line here' /dir/*
请注意,sed -i 语义因 Unix 风格而异,因此请检查您的 man sed。这是为 GNU 风格编写的。
【讨论】:
perl -pi -we'print "extra line\n" if $. == 3; close ARGV if eof' files
close(ARGV)是每个文件开头重新启动行计数器$.所必需的;默认情况下,它计算文件中的行数。
【讨论】:
-i.bak 来保护您免于因输入错误而丢失大量数据吗? (想象一下你忘记了-p。)
这是AWK 的用法,而不是sed,
for i in $(<list_of_files)
do
awk '{if (FNR!=2) print $0;
else { print "new line"; print $0}}' $i > ${i}.tmp;
mv ${i}.tmp $i;
done
【讨论】:
ls | xargs --replace=foo perl -i -ne 'print; print "second line text\n" unless $x++;' foo
【讨论】:
perl -i 没有备份:perl -i.bak。这很简单,一旦确定您的编辑没有出错,您就可以轻松删除备份。