3

次のようなファイルがあります。

ABC
DEF
GHI

次のようなシェル変数があります。

var="MRD"

私がやりたいことは、ファイルを次のようにすることです。

ABC
MRD
DEF
GHI

私はこれをやろうとしていました:

sed -i -e 's/ABC/&$var/g' text.txt 

ただし、値の代わりに $var を挿入するだけです。私もこれを試しました:

sed -i -e 's/ABC/&"$var"/g' text.txt 

しかし、それもうまくいきませんでした。何かご意見は?

ありがとう!

4

7 に答える 7

3

これが機能するかどうかを確認してください。

var="MRD"
sed 's/ABC/&\n'"${var}"'/' text.txt

編集

/ の代わりに任意の文字を使用できます。したがって、検索式または置換式にあると予想される場合は、| を使用します。

var="</stuff>"
sed 's|ABC|&\n'"${var}"'|' text.txt
于 2012-04-10T23:21:45.390 に答える
2

sed は、検索と置換以上のことを実行できます。次を追加できます。

sed "/ABC/a $var"

一部の古いバージョンの sed では、次のように記述する必要があります。

sed "/ABC/a\\
$var"
于 2012-04-10T23:22:55.510 に答える
1
var='<stuff>' awk '{ print $0 } NR==1 { print ENVIRON["var"]; }' \
  <<<$'ABC\nDEF\nGHI' \

収量

ABC
<stuff>
DEF
GHI

インプレース置換を行うには:

tempfile=$(mktemp "${infile}.XXXXXX")
awk ... <"$infile" >"$tempfile" \
  && mv "$tempfile" "$infile"

環境内にある必要があることに注意してくださいvar。したがって、awk を呼び出すのと同じ行で定義していない場合は、それを行う必要がありますexport

于 2012-04-10T23:41:58.970 に答える
0
printf '2i\n%s\n.\nw\n' "$var" | ed -s text.txt
于 2012-04-14T22:46:05.623 に答える
0

二重引用符に切り替える前に、単一引用符 (補間を防ぐ) を終了するか、最初に二重引用符を使用する必要があります。

つまり、sコマンドは現在の行を変更し、行を挿入しません。を含む単一の行になり、独自の行に挿入されDEFMRDません。MRDそのためには、次のようなものが必要です

sed -i -e "/ABC/a\\
$var\\
." text.txt
于 2012-04-10T23:24:14.183 に答える
0

awk:

awk "{print \$0}NR==1{print \"$var\"}" text.txt

またはvarエクスポートされている場合:

export var=MRD
awk '{print $0}NR==1{print ENVIRON["var"]}' text.txt
于 2012-04-10T23:26:18.050 に答える
0

一重引用符は変数補間を無効にします。二重引用符はしません。

sed -i -e "s/ABC/&$var/g" text.txt

$var( containsまたは特別に扱う/その他の文字を含む場合、これはあまり良い考えではないことに注意してください。)sed

于 2012-04-10T23:21:29.583 に答える