Linuc Lv1 メモ④パイプ、正規表現

パイプ

コマンドやプログラムの出力結果を。別のコマンドや入力に渡すことでちょっと複雑な処理をすることができる。

teeコマンド
コマンドの実行結果を保存するとともに、次のコマンドへと実行結果を渡せる。

[root@localhost ken]# tee ls_log | wc -l

[root@localhost ken]# ls -l | tee test_log | wc -l
5

-a(add) 追記


リダイレクト

コマンド実行結果を画面に出力しないで、指定したファイルに保存するだけの処理をしたい場合などに利用する。

コマンド << 終了文字

終了文字が現れるまで標準入力へ送る。
↓の場合はworld を入力するまで入力し続け、該当ワードを入力したら、それまでに入力した文字をすべて表示する。

[root@localhost ~]# cat << world
> Hello world1
> Hello
> world
Hello world1
Hello

↓のようにファイルを指定したら、該当ワードを入力した時点でファイルの中身がすべて表示される。

[root@localhost ~]# cat ken.txt << AWS5
> AWS8
> AWS5
AWS
AWS2
AW3
AEDS
AFWE
AWEgaga
AWS5
LPIC
LINUC
Linuc

コマンド > ファイル 2>&1

ファイルに標準出力とエラー結果を書き込む。

tr [オプション] [文字列1 [文字列2]] < ファイル名

[root@localhost ~]# tr PING ping < ryo > ryo2
[root@localhost ~]# ls
[root@localhost ~]# cat ryo2
ping
ping

xargsコマンド

標準入力から渡された文字列を、指定のコマンドの引数として実行するコマンドはxargsです。

[root@localhost ~]# cat ryo2 | xargs touch
[root@localhost ~]# ls
ryo ryo2


テキスト処理フィルタ

ファイルやテキストデータを何らかの処理を行って出力するコマンド。

catコマンド

-n 行数付与 cat -n = nl

nlコマンド

指定したファイルの行数を指定して表示する。

空行を含めたすべての行に番号をつける
nl -b a ken2.txt
cat -n ken2.txt

[root@localhost ~]# nl -b a ken2.txt
     1  AWS
     2  AWS2
     3  AW3
     4  AEDS
     5
     6  AFWE
     7  AWEgaga
     8
     9
    10  AWS5
    11  LPIC
    12  LINUC

[root@localhost ~]# cat -n ken2.txt
     1  AWS
     2  AWS2
     3  AW3
     4  AEDS
     5
     6  AFWE
     7  AWEgaga
     8
     9
    10  AWS5
    11  LPIC
    12  LINUC

空行を除いたすべての行に番号をつける(nlコマンドはデフォルト)
nl -b t ken2.txt
cat -b ken2.txt

[root@localhost ~]# nl -b t ken2.txt
     1  AWS
     2  AWS2
     3  AW3
     4  AEDS

     5  AFWE
     6  AWEgaga


     7  AWS5
     8  LPIC
     9  LINUC
    10  Linuc

[root@localhost ~]# cat -b ken2.txt
     1  AWS
     2  AWS2
     3  AW3
     4  AEDS

     5  AFWE
     6  AWEgaga


     7  AWS5
     8  LPIC
     9  LINUC
    10  Linuc

odコマンド(Octal Dump)

8進数や16進数で表示する。デフォルトは8進数(octal)、od xコマンドは16進数(Hexadecimal)

[root@localhost etc]# cat local.conf
NG=ja_JP.utf8
[root@localhost etc]# od local.conf
0000000 043516 065075 057541 050112 072456 063164 005070
0000016expand

expandコマンド

expand -t 1 ken.txt タブを1つのスペースに置き換える。 
-t数字でスペース数を指定。

[root@localhost ~]# expand -t 1  ken.txt
     AWS
AWS2
AW3
    AEDS
AFWE
AWEgaga
AWS5
 LPIC
LINUC
Linuc

headコマンド

先頭〇行を表示するコマンド。
haad -〇 ファイル名  or  haad -n 〇 ファイル名

[root@localhost ~]# head -5 ken2.txt
AWS
AWS2
AW3
AEDS
AFWE
[root@localhost ~]# head -n 5 ken2.txt
AWS
AWS2
AW3
AEDS
AFWE

tailコマンド

指定したファイルの末尾部分を表示するコマンド。
行数を指定する場合、-n (行数) もしくは、-(行数)

[root@localhost ~]# tail -n 5 ken2.txt
AWS5
LPIC
LINUC
Linuc

[root@localhost ~]# tail -5 ken2.txt
AWS5
LPIC
LINUC
Linuc

cutコマンド

cut -d 1,7 -f : /etc/passwd 
「:」で区切られている「/etc/passwd」ファイルから、1番目のフィールドと7番目のフィールドを取り出す。
-d(delimiter)

prコマンド

pr -h title-ken2 -l 30 ken2.txt
・ken2テキストを印刷する。
・印刷する際のヘッダー名は「title-ken2」
・1ページあたり30行

uniqコマンド

ソートされているファイルにある連続した重複行のみを表示するコマンド。
uniq -d(duplication) 重複している行のみ表示
uniq -u 重複していない行のみ表示

改行コード

改行コードと代表的なOSの組み合わせは以下のとおりです。
・CRLF(\r\n):Windows
・LF(\n):Unix OS(Linux, Mac OS Xなど)
・CR(\r):古いMacOS(バージョン9まで)

正規表現

sedコマンド

^$ 空白行

[root@localhost ~]# cat ken2.txt
 AWS
AWS2
AW3
AEDS

AFWE
AWEg aga

AWS5
LPIC
LINUC
[root@localhost ~]# sed '/^$/d' ken2.txt
 AWS
AWS2
AW3
AEDS
AFWE
AWEg aga
AWS5
LPIC
LINUC

sed y/ab/AB/ memo = sed -e s/a/A/g -e s/b/B/g memo

[ken@localhost ~]$ cat memo
a b ab
c d cd
e f ef
[ken@localhost ~]$ sed y/ab/AB/ memo
A B AB
c d cd
e f ef
[ken@localhost ~]$ sed -e s/a/A/g -e s/b/B/g memo
A B AB
c d cd
e f ef

grep、egrepコマンド

grep
grep -i aw ken2.txt  ファイルから大文字小文字を問わず「aw」を検索

[root@localhost ~]# grep -i aw ken2.txt
 AWS
AWS2
AW3
AWEg aga
AWS5

egrep = grep -E
正規表現を使う場合

[root@localhost ~]# egrep 'a?' ken2.txt
 AWS
AWS2
AW3
AEDS

AFWE
AWEg aga

AWS5
LPIC

fgrep = grep \

正規表現を使わない場合

[root@localhost ~]# fgrep 'AW.' ken2.txt
AW.
[root@localhost ~]# egrep 'AE.' ken2.txt
AEDS

sed(Stream Editor)コマンド

sed s/Lpic/lpic/ memo ファイルの1行目の最初の該当の「Lpic」を「lpic」に置換する
sed s/Lpic/lpic/g memo 該当箇所をすべて置換する
複数編集する場合は、「-e」必須

[root@localhost ~]# cat memo
Linux Linux Linux
Lpic Lpic Lpic
Linuc
[root@localhost ~]# sed s/Lpic/lpic/ memo
Linux Linux Linux
lpic Lpic Lpic
Linuc
[root@localhost ~]# sed s/Lpic/lpic/g memo
Linux Linux Linux
lpic lpic lpic
Linuc

sed '1,2d' memo ファイルの1行目と2行目を削除する

[root@localhost ~]# cat memo
Linux Linux Linux
Lpic Lpic Lpic
Linuc
[root@localhost ~]# sed '1,2d' memo
Linuc


この記事が気に入ったらサポートをしてみませんか?