テキストファイルを変更したいです。 22行にテキストがあり、22行を空白のままにして、22行のテキストを23行に移動したいとしましょう。これを説明するために()に変更したいと思いますprintf 'Some %d text\n' {1..23}
。
Some 1 text
Some 2 text
Some 3 text
Some 4 text
Some 5 text
Some 6 text
Some 7 text
Some 8 text
Some 9 text
Some 10 text
Some 11 text
Some 12 text
Some 13 text
Some 14 text
Some 15 text
Some 16 text
Some 17 text
Some 18 text
Some 19 text
Some 20 text
Some 21 text
Some 22 text
Some 23 text
以下を入力してください:
Some 1 text
Some 2 text
Some 3 text
Some 4 text
Some 5 text
Some 6 text
Some 7 text
Some 8 text
Some 9 text
Some 10 text
Some 11 text
Some 12 text
Some 13 text
Some 14 text
Some 15 text
Some 16 text
Some 17 text
Some 18 text
Some 19 text
Some 20 text
Some 21 text
Some 22 text
Some 23 text
どうすればいいですか?
答え1
sed -i '21 a\
' yourfile
図21は、行1の後に空の行を追加するために使用された行1の前の行番号の完全な例です。
francois@zaphod:~$ cat toto
Some text
Some more text
Some other text
francois@zaphod:~$ sed -i '1 a\
' toto
francois@zaphod:~$ cat toto
Some text
Some more text
Some other text
francois@zaphod:~$
これにより、ファイルの長さは4行です(空白行を含む)。
答え2
標準エディタを使用してed
そのコマンドを入力に印刷します。
printf '%s\n' 22a '' . w q | ed -s file
- 22行目の後に追加
- (空行)
.
- 追加入力の終了- ディスクへのファイルの書き込み
- 編集終了
23i
または代わりに23行目の前に挿入してください22a
。
答え3
sed で以下を使用できます。
$ sed -e '22{x;G;}' file
これにより、22行目の前に空行(改行文字)が配置されます。 22行前の内容は下にプッシュされます。ただし、これにより予約済みスペースの内容が変更されます。保存するには、次のバリアントを使用します。
$ sed -e '22{x;p;x;}' file
または awk/perl ユーティリティを使用します。
$ awk 'NR==22{$0 = RS $0}1' file
$ perl -pe '22..22&&s/^/\n/' file