sedで置換とテキストフィルタリングしよう

# はじめに
この記事では、sedの置換とテキストフィルタリングの基本的な使い方を紹介します。
sedのエッジの効いた使い方は、下記のQiita記事を読んでみてください。

# sedのよさげなQiita記事
[ワンライナーでお手軽実行可能なsed入門]
(https://qiita.com/muran001/items/472abcfc353d5df7b77a)

[sedコマンドの備忘録]
(https://qiita.com/takech9203/items/b96eff5773ce9d9cc9b3)

[find + sed で一斉置換]
(https://qiita.com/somat/items/b775f7e082f1559707e2)

# 置換

## sコマンドで置換

```sed -e 's/SCRIPTCMD/g'```

-e = EXPRESSION スクリプトコマンドを追加する

### Ex) 行頭の#を置換して、コメントアウトを外す

```$ sed -e 's/^#//g'```

**BEFORE**

```
$ head /etc/httpd/conf/httpd.conf
#
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you are unsure
```

**AFTER**

```
$ head /etc/httpd/conf/httpd.conf | sed -e 's/^#//g'

This is the main Apache HTTP server configuration file.  It contains the
configuration directives that give the server its instructions.
See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
In particular, see
<URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
for a discussion of each configuration directive.

Do NOT simply read the instructions in here without understanding
what they do.  They're here only as hints or reminders.  If you are unsure
```


# テキストフィルタリング

## pコマンドで引っかかった行だけ出力

```sed -n '/SCRIPTCMD/p'```

-n = SILENT pコマンドで引っかかった行だけ出力
※ -nとpコマンドはセットで使う

### Ex) 最初の行と最後の行の文字列を指定して、出力範囲をフィルタリングする

```$ sed -n '/This is the main/,/In particular, see/p'```

**BEFORE**

````
$ head /etc/httpd/conf/httpd.conf
#
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you are unsure
```

**AFTER**

```
$ head /etc/httpd/conf/httpd.conf | sed -n '/This is the main/,/In particular, see/p'
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
```

### Ex) 最初の行番号と最後の行番号を指定して、出力範囲をフィルタリングする

```$ sed -n '2,3p'```

**BEFORE**

```
$ head /etc/httpd/conf/httpd.conf
#
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you are unsure
```

**AFTER**

```
$ head /etc/httpd/conf/httpd.conf | sed -n '2,3p'
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
```

## dコマンドで指定した文字列が含まれる行を削除

### Ex) 空白行を出力しないようにフィルタリングする

```$ sed -e '/^#$/d'```

**BEFORE**

```
$ head /etc/httpd/conf/httpd.conf
#
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you are unsure
```

**AFTER**

```
$ head /etc/httpd/conf/httpd.conf | sed -e '/^#$/d'
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you are unsure
```