
各行の先頭に文字列を追加する方法を探しています(各行に同じ文字列を使用)。カスタマイズすることはできませんが、覚えやすく、すべてのPOSIX互換プラットフォーム(およびすべてのシェル)で使用できます。
答え1
:|paste -d'foo ' - - - - input > output
(冗談です。ここで公開されているすべての解決策の中で最速の解決策を見つけることもできます。:-b)。
正式な方法は次のとおりです。
sed 's/^/foo /' < input > output
ただし、任意の文字列に簡単に適用することはできません。例えば、
sed "s/^/$var /"
、または改行文字を$var
含まない場合にのみ有効であり、少なくともGNU sedの任意のコマンド実行の脆弱性は保証されません。&
\
/
これに関して、
export var
awk '{print ENVIRON["var"], $0}'
または
perl -pe '$_="$ENV{var} $_"'
うまく動作します。
答え2
あなたはそれを使用することができますsed
:
sed -i 's/^/your_string /' your_file
コメントいただいたStephaneとMarcoに感謝します。この-i
オプションは POSIX ではありません。上記のタスクを実行するPOSIXメソッドは次のとおりです。
sed 's/^/your_string /' your_file > tmp_copy && mv tmp_copy your_file
またはperl
:
perl -pi -e 's/^/your_string /' your_file
説明する
どちらのコマンドも正規表現置換を実行して、行^
の先頭()を目的の文字列に置き換えます。両方のコマンドのスイッチは、ファイルが-i
その場所で編集されることを保証します(つまり、変更は標準出力として印刷されず、ファイルに反映されます)。
sed
すべてのPOSIX準拠のオペレーティングシステムで動作し、perl
以下を除くほとんどの最新のUnixで動作する必要があります。もう一生懸命働いた削除してください。
答え3
awk
私はプレフィックス文字列 "foo"を使って解決策を思いつきました。
awk '{ print "foo", $0; }' input > output
awk
クロスプラットフォームであり、すべてのPOSIXシステムで使用できます。内部編集は行われません。 2番目のファイルを作成せずに1つのファイルを編集するには、一時ファイルを使用する必要があります。sed
構文を示すJosephの答えを参照してください。別のトリックは、基本的に、元のファイルと同じファイル名を持つ一時ファイルを生成する次の構文を使用することです。
{ rm file; awk '{ print "foo", $0 }' > file; } < file
答え4
perl
これを行うには、次の方法を使用できます。
$ perl -pi -e 's/^/mystring /' afile.txt
はい
サンプルファイルを作成します。
$ seq 5 > afile.txt
$ cat afile.txt
1
2
3
4
5
上記のコマンドを実行します。
$ perl -pi -e 's/^/mystring /' afile.txt
$ cat afile.txt
mystring 1
mystring 2
mystring 3
mystring 4
mystring 5