如何重定向文本,然后在指定的行号处写入?

如何重定向文本,然后在指定的行号处写入?

是否可以将文本字符串重定向到“参数内指定”行而不是文件的后者?或者命令/和/或参数、子 shell 的组合(如果无法通过重定向实现)。

答案1

使用 GNU awk

text_string='some arbitrary
text'
line_number=12
file=/some/file

STRING="$text_string" gawk -i /usr/share/awk/inplace.awk -v n="$line_number" -e '
  NR == n {print ENVIRON["STRING"]}
  {print}' -E /dev/null "$file"

perl与:相同

perl -spi -e '$_ = "$string\n$_" if $. == $n
  ' -- -string="$text_string" -n="$line_number" -- "$file"

它们就地编辑文件(实际上用编辑后的副本替换它)。

gawk 变体不适用于名为-.要编辑-当前目录中调用的文件,请改用./-

还,不使用-i inplaceas尝试首先从当前工作目录gawk加载inplace扩展(asinplace或),有人可能已经在其中植入了恶意软件。随系统提供的扩展inplace.awk的路径可能会有所不同,请参阅输出inplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

相关内容