- で始まる行と一致する行の後にsedを追加したいと思います。次のような複雑な行です。number_of_cars_are
more /tmp/orig_file
number_of_cars_are=$number_of_cars_are
追加したい行は次のとおりです。
numbers=` su hdfs -c "hdfs dfs -ls $var/*.jar" |sed s'/\// /g' | awk '{print $NF}' | wc -m `
だから私たちは次のことをしました。
sed '/^[[:space:]]*number_of_cars_are =.*/a numbers=` su hdfs -c "hdfs dfs -ls $var/*.jar" |sed s'/\// /g' | awk '{print $NF}' | wc -m `' /tmp/orig_file > /tmp/new_file
しかし、我々は次のような結果を得る
sed: can't read /g | awk {print: No such file or directory
sed: can't read } | wc -m `: No such file or directory
それで私たちはバックスラッシュも追加してみました。
sed '/^[[:space:]]*number_of_cars_are =.*/a numbers=` su hdfs -c \"hdfs dfs -ls $var/*.jar\" |sed s'/\// /g' | awk '{print \$NF}' | wc -m `' /tmp/orig_file > /tmp/new_file
しかし、同じように
sed: can't read /g | awk {print: No such file or directory
sed: can't read $NF} | wc -m `: No such file or directory
行を追加する方法に関する提案
ベストアンサー1
シェルが追加の行の(必要な)特殊シンボルを解釈しないように、Sedコマンドをファイルに配置するのが最善です。
longline.sed
:
/^[[:space:]]*number_of_cars_are=/a\
numbers=` su hdfs -c "hdfs dfs -ls $var/*.jar" |sed s'/\\// /g' | awk '{print $NF}' | wc -m `
Sedはエスケープ文字を解釈するので、唯一の修正はバックスラッシュをエスケープすることです。
$ sed -f longline.sed newfile
more /tmp/orig_file
number_of_cars_are=$number_of_cars_are
numbers=` su hdfs -c "hdfs dfs -ls $var/*.jar" |sed s'/\// /g' | awk '{print $NF}' | wc -m `