sedを使用して、2つの文字列の間のすべての行(1つのユーザー入力)を印刷します。

sedを使用して、2つの文字列の間のすべての行(1つのユーザー入力)を印刷します。

私は以下を使用しようとしています:

sed -n '/String1/,/String2/p' Filename

String1とString2の間のすべての行を印刷します。 String1をユーザー入力として追加したいのですが、

read $userinput
sed -n '/$userinput/,/String2/p' Filename. 

$userinputただし、入力は引用符で囲まれているため、指定された入力ではなく文字列として読み取られます。

ベストアンサー1

簡単に言えば、

read userinput                         # without sigil '$'
sed -n "/$userinput/,/String2/p" file  # with double quotes

シェルから正しく引用する方法を学ぶことは非常に重要です。

スペース/メタ文字を含むすべてのリテラルは「二重引用符」として扱われます。すべて拡張:"$var"、、、、。"$(command "$var")"​コードやテキストについてはを参照してください。"${array[@]}""a & b"'single quotes'$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words

おすすめ記事