awk / sed如何将带有特殊字符的文件添加到另一个文件中的特定行

时间:2018-08-03 14:50:15

标签: bash awk sed

我在本主题中写有问题。 路径/ root / filetoadd下的文件具有特殊字符* *> /和换行符。该文件大约有20行。

我想将此文件添加到特定行下的另一个文件中。

这是我现在没做的事。

linenumber=`awk -v line='<xyz *>' '$0 == line {print NR}' /etc/folders/filewithsomedata`  
(this gives me line 162 thats correct, there I want to place another file) 
content=`cat /root/filetoadd`
sed -i "${linenumber} i \ ${content}" /etc/folders/filewithsomedata

最后一行给我错误,因为我上面提到的文件包含特殊字符和换行符。您知道如何添加此文件以保留所有这些新行和字符的原始内容吗?

1 个答案:

答案 0 :(得分:1)

您使事情变得太复杂了。使用awk时,您永远不需要sed。只需这样做:

awk -v line='<xyz *>' '
NR==FNR { add = add $0 ORS; next }
{ print }
$0 == line { printf "%s", add }
' /root/filetoadd /etc/folders/filewithsomedata > tmp &&
mv tmp /etc/folders/filewithsomedata