GNU/Linux >> Linux の 問題 >  >> Linux

Unix Sed チュートリアル:ファイル行の追加、挿入、置換、カウント

この記事は、進行中の Unix sed コマンド チュートリアル シリーズの一部です。以前の記事では、単一のコマンド (印刷、削除、置換、ファイル書き込み) で sed を学びました。

Sed は、ファイル内の行に対して多数の操作を実行するための多くのコマンドを提供します。

この記事では、ファイルの行を追加、挿入、置換する方法と、ファイルの行番号を取得する方法を確認します。

  • 行を追加
  • 行を挿入
  • 改行
  • 行数を数える

最初に、以下で説明するすべての例で使用される geekstuff.txt ファイルを作成しましょう。

$cat thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

Sed コマンドを使用して行を追加

Sed は、各行の後にアドレスまたはパターンを追加するコマンド「a」を提供します。

Syntax:

#sed 'ADDRESS a\
	Line which you want to append' filename

#sed '/PATTERN/ a\
	Line which you want to append' filename

Sed Append の例 1. ファイルの 3 行目の後に行を追加します。

3 行目の後に「クールなガジェットとウェブサイト」という行を追加します。 sed “a” コマンドは一致の後に行を挿入します。

$ sed '3 a\
> Cool gadgets and websites' thegeekstuff.txt

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Cool gadgets and websites
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

Sed Append の例 2. パターンに一致するすべての行の後に行を追加する

以下の sed コマンドは、パターン「Sysadmin」に一致するすべての行の後に「Linux Scripting」行を追加します。

$ sed '/Sysadmin/a \
> Linux Scripting' thegeekstuff.txt

Linux Sysadmin
Linux Scripting
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.
Linux Scripting

Sed Append の例 3. ファイルの最後に行を追加

次の例では、ファイルの最後に「Website Design」という行を追加します。

$ sed '$ a\
> Website Design' thegeekstuff.txt

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.
Website Design

Sed コマンドを使用して行を挿入

Sed コマンド「i」は、範囲またはパターンを含むすべての行の前に行を挿入するために使用されます。

Syntax:

#sed 'ADDRESS i\
	Line which you want to insert' filename

#sed '/PATTERN/ i\
	Line which you want to insert' filename

Sed Insert 例 1. 行の 4 行目の前に行を追加します。

4 行目の前に「クールなガジェットとウェブサイト」という行を追加します。 「a」コマンドは一致の後に行を挿入しますが、「i」コマンドは一致の前に挿入します。

$ sed '4 i\
> Cool gadgets and websites' thegeekstuff.txt

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Cool gadgets and websites
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

Sed Insert の例 2. パターンを含むすべての行の前に行を挿入します

以下の sed コマンドは、「Sysadmin」というパターンに一致するすべての行の前に「Linux Scripting」という行を追加します。

$ sed '/Sysadmin/i \
> Linux Scripting' thegeekstuff.txt

Linux Scripting
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Linux Scripting
Windows- Sysadmin, reboot etc.

Sed Insert の例 3. ファイルの最終行の前に行を挿入します。

ファイルの最後の行の前に「Website Design」という行を追加します。

$ sed '$ i\
> Website Design' thegeekstuff.txt

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Website Design
Windows- Sysadmin, reboot etc.

Sed コマンドを使用して行を置換

sed の「c」コマンドは、パターンまたは範囲に一致するすべての行を新しい特定の行に置き換えるために使用されます。

Syntax:

#sed 'ADDRESS c\
	new line' filename

#sed '/PATTERN/ c\
	new line' filename

Sed Replace の例 1. ファイルの最初の行を置き換える

以下のコマンドは、ファイルの最初の行を「The Geek Stuff」に置き換えます。

$ sed '1 c\
> The Geek Stuff' thegeekstuff.txt

The Geek Stuff
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

Sed Replace の例 2. パターンに一致する行を置換

「Linux Sysadmin」というパターンを持つすべての行を「Linux Sysadmin – Scripting」に置き換えます。

$ sed '/Linux Sysadmin/c \
> Linux Sysadmin - Scripting' thegeekstuff.txt

Linux Sysadmin - Scripting
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

Sed Replace の例 3. ファイルの最後の行を置き換える

以下に示す sed コマンドは、ファイルの最後の行を「ファイルの最後の行」に置き換えます。

$ sed '$ c\
> Last line of the file' thegeekstuff.txt

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Last line of the file

Sed コマンドを使用して行番号を表示する

「=」は、現在の行番号を標準出力に出力する sed のコマンドです。

Syntax:

#sed '=' filename

上記の send コマンド構文は、最初の行に行番号を出力し、次の行にファイルの元の行を出力します。

sed ‘=’ コマンドは 1 つのアドレスしか受け付けないため、行の範囲の行番号を出力したい場合は、中かっこを使用する必要があります。

Syntax:

# sed -n '/PATTERN/,/PATTERN/ {
=
p
}' filename

Sed 行番号の例 1. パターンを含む行番号を見つける

以下の sed コマンドは、パターン「データベース」に一致する行番号を出力します

$ sed -n '/Databases/=' thegeekstuff.txt

2

Sed 行番号の例 2. 行番号の印刷範囲

パターン「Oracle」から「Productivity」に一致する行の行番号を出力してください。

$ sed -n '/Oracle/,/Productivity/{
> =
> p
> }' thegeekstuff.txt

2
Databases - Oracle, mySQL etc.
3
Security (Firewall, Network, Online Security etc)
4
Storage in Linux
5
Productivity (Too many technologies to explore, not much time available)

Sed 行番号の例 3. ファイル内の合計行数を出力

ファイルの最終行の行番号がファイルの総行数になります。パターン $ は、ファイルの最終行を指定します。

$ sed -n '$=' thegeekstuff.txt

6

Linux
  1. 大きなファイルにSedとParallelを使用して、行を別のコンテンツに置き換えますか?

  2. 行の範囲を行の範囲(sedまたはその他)に置き換えますか?

  3. ファイルに複数の行を追加するにはどうすればよいですか?

  1. ファイルの行数を数えますか?

  2. ファイルの途中で特定の行を表示するためのクイックunixコマンド?

  3. unix - ファイル内の列数

  1. bashスクリプトは、ファイルの最初の行にテキストを追加します.

  2. sed - 一致後に X 行の後に行を挿入する

  3. sedを使用して、ファイル内の行の範囲内のテキストを検索して置換します