Bashはその行のすべての内容を返し、行を空白のままにします。

Bashはその行のすべての内容を返し、行を空白のままにします。

テキストファイルを変更したいです。 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
  1. 22行目の後に追加
  2. (空行)
  3. .- 追加入力の終了
  4. ディスクへのファイルの書き込み
  5. 編集終了

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

関連情報