web-dev-qa-db-ja.com

Linuxの特定の行でファイルにテキストを追加する

特定の行を追加したい場合、avatarで始まるファイルにMakeFileを付けて、avatarをファイルの15行目に追加する必要があるとします。

これは、ファイルにテキストを追加する方法です。

echo 'avatar' >> MakeFile.websvc

これは、MakeFileで始まるファイルにテキストを追加する方法です。

echo 'avatar' >> *MakeFile.

しかし、この行をファイルの15行目に追加することはできません。

38
user2123459

sedを使用してこれを解決できます。

sed "15i avatar" Makefile.txt

または、-iオプションは、ファイルに加えられた変更を保存します。

sed -i "15i avatar" Makefile.txt

Makefileで始まるすべてのファイルを変更するには:

sed "15i avatar" Makefile*

注:上記の15は、テキストを配置する対象の行です。

66

Sedの使用:

sed -i '15i\avatar\' Makefile*

-iオプションは、変換がインプレースで行われることを示します(複数のファイルを処理する場合などに便利です)。

また、あなたの質問では、* MakeFileは「MakeFileで終わるすべてのファイル」を表し、「MakeFileで始まるすべてのファイル」はMakeFile *と表示されます。

3
lmsteffan

文字列と行番号オプションをスクリプトに渡す必要がある場合は、これを試してください。

Perl -i -slpe 'print $s if $. == $n; $. = 0 if eof' -- -n=15 -s="avatar" Makefile*

-i入力ファイルを編集します。バックアップコピーは作成しません
$.は行番号です

これは、 sedまたはawkで特定の行番号に行を挿入 に対する私のソリューションに基づいています。

2
Chris Koknat

より移植性の高いバージョンが必要な場合は、exを使用できます。これはany* Nixシステムで動作します。 (これは POSIXで指定 )Sedこれまでに与えられたコマンドは、GNU Sed。

「Makefile。」で始まる名前の現在のディレクトリ内の各ファイルの15行目に「アバター」以外の何も含まない行を挿入するには、次を使用します。

for f in MakeFile.*; do printf '%s\n' 15i 'avatar' . x | ex "$f"; done
2
Wildcard
Perl -pi -e 'if($.==14){s/\n/\navatar\n/g}if(eof){$.=0}' MakeFile*
0
Vijay