仕事支援sed awk

ファイルの特定フィールドを表示する。【awk】

2番目のフィールドを表示する。

testuser$ cat test.txt
aaa bbb ccc
ddd eee fff
ggg hhh iii
testuser$ awk '{print $2}' test.txt
bbb
eee
hhh


区切り文字を指定した上で特定フィールドを表示する。【awk】

区切り文字「,」を指定し、入力ファイルの2番目のフィールドを表示する。

testuser$ cat test.txt
aaa aaa, bbb bbb, ccc ccc,
ddd ddd, eee eee, fff fff,
ggg ggg, hhh hhh, iii iii,
testuser$ awk -F, '{print $2}' test.txt
bbb bbb
eee eee
hhh hhh


ファイルの各行の先頭に特定の文字列を付加する。【sed】

「ls -ltr」を全行の先頭に付加する。

testuser$ cat test.txt
aaaaaa
bbbbbb
cccccc
testuser$ sed 's/^/ls -ltr /g' test.txt
ls -ltr aaaaaa
ls -ltr bbbbbb
ls -ltr cccccc


ファイル内の文字列を引用して、各行の先頭に文字列を付加する。【sed,awk】

各行の先頭に「echo ファイル名;」という文字列を付加する。

testuser$ cat test.txt
ls -ltr aaa.txt
ls -ltr bbb.txt
ls -ltr ccc.txt
testuser$ awk '{print $3 ";" $0}' test.txt | sed -e 's/^/echo /g'
echo aaa.txt; ls -ltr aaa.txt
echo bbb.txt; ls -ltr bbb.txt
echo ccc.txt; ls -ltr ccc.txt


複数の文字列置換を行う。【sed】

1つのファイルに対する複数の文字列置換を実行する。

testuser$ cat test.txt
111aaa222
111bbb222
111ccc333
testuser$ sed -e 's/111/888/' -e 's/222/999/' test.txt
888aaa999
888bbb999
888ccc999


空白行を削除する。【sed】

空白行(改行のみ)をすべて削除する。

testuser$ cat test.txt
aaa

bbb
ccc
testuser$ sed '/^ *$/d' test.txt
aaa
bbb
ccc


行番号を指定して表示する。【sed】

2~4行目を表示する。

testuser$ cat test.txt
aaaa
bbbb
cccc
dddd
eeee
sed -n '2,4p' test.txt
bbbb
cccc
dddd



【オススメ】
以下のamazonリンクから購入すると齋藤緒のページ作りパワーが劇的にアップします。



パターンにマッチした行からファイルの最後までを削除する。【sed】

「ccc」にマッチする行からファイルの最後まで削除する。

testuser$ cat test.txt
aaa
bbb
ccc
ddd
eee
testuser$ sed '/ccc/,$d' test.txt
aaa
bbb


マッチした文字列を利用して置換する。【sed】

数字を中括弧で括る。

testuser$ cat test.txt
aaa1234bbb456
aaa1234bbb456
testuser$ sed 's/[1-9][1-9]*/{&}/g' test.txt
aaa{1234}bbb{456}
aaa{1234}bbb{456}


スペースの文字数を統一する。【sed】

連続する2個以上のスペースを1個に統一する。

testuser$ cat test.txt
aaaa   aaa  aa a
bbbb   bbb  bb b
cccc   ccc  cc c
testuser$ sed 's/  */ /g' test.txt
aaaa aaa aa a
bbbb bbb bb b
cccc ccc cc c


コメント行を削除する。【sed】

#で始まる行を削除する。(但し「#!」で始まる行は削除しない。)

testuser$ cat test.txt
#!/bin/csh
#move directory
cd ~/user/test
#
#display directory
ls -ltr
testuser$ sed -e '/^#$/d' -e '/^#[^\!]/d' test.txt
#!/bin/csh
cd ~/user/test
ls -ltr


パターンマッチした中で置換対象を指定する。【sed】

2番目に「bbb」にパターンマッチした文字列を「zzz」に置換する。

testuser$ cat test.txt
aaa bbb ccc bbb aaa
aaa bbb ccc bbb aaa
testuser$ sed 's/bbb/zzz/2' test.txt
aaa bbb ccc zzz aaa
aaa bbb ccc zzz aaa


改行を入れる。【sed】

2番目の「aaa」の後ろに改行を挿入する。

testuser$ cat sample.sed
s/aaa/aaa\
/2
testuser$ cat test.txt
aaabbbaaabbbaaabbb
testuser$ sed -f sample.sed test.txt
aaabbbaaa
bbbaaabbb



【オススメ】
以下のamazonリンクから購入すると齋藤緒のページ作りパワーが劇的にアップします。



文字を大小変換する。【sed】

「a」「b」「c」をそれぞれ大文字に変換する。

testuser$ cat test.txt
aaabbbcccddd
aaabbbcccddd
testuser$ sed 'y/abc/ABC/' test.txt
AAABBBCCCddd
AAABBBCCCddd


文字を消す。【sed】

英字をすべて消す。

testuser$ cat test.txt
aaa1234bbb5678
aaa1234bbb5678
testuser$ sed 's/[a-zA-z]//g' test.txt
12345678
12345678


パターンマッチした行全体を置換する。【sed】

「bbb」を含む行全体を「matchline」に置換する。

testuser$ cat sample.sed
/bbb/c\
[matchline]
testuser$ cat test.txt
aaa111ccc
bbb111ccc
aaa111ccc
testuser$ sed -f sample.sed test.txt
aaa111ccc
[matchline]
aaa111ccc


パターンマッチした行の上に文字列を挿入する。【sed】

「bbb」を含む行の上に「matchline」を挿入する。

testuser$ cat sample.sed
/bbb/i\
[matchline]
testuser$ cat test.txt
aaa111ccc
bbb111ccc
aaa111ccc
bbb111ccc
testuser$ sed -f sample.sed test.txt
aaa111ccc
[matchline]
bbb111ccc
aaa111ccc
[matchline]
bbb111ccc


パターンマッチした行の下に文字列を挿入する。【sed】

「bbb」を含む行の下に「matchline」を挿入する。

testuser$ cat sample.sed
/bbb/a\
[matchline]
testuser$ cat test.txt
aaa111ccc
bbb111ccc
aaa111ccc
bbb111ccc
testuser$ sed -f sample.sed test.txt
aaa111ccc
bbb111ccc
[matchline]
aaa111ccc
bbb111ccc
[matchline]


パターンマッチした行の下に出現する特定行を抽出する。【sed】

「aaa value="111"」タグの子タグ「ccc」の行を抽出する。

testuser$ cat test.xml
<aaa value="111">
    <bbb>1</bbb>
    <ccc>2</ccc>
</aaa>
<aaa value="222">
    <bbb>3</bbb>
    <ccc>4</ccc>
</aaa>
testuser$ sed -n '/<aaa value="111">/,/<ccc>/p' test.xml | grep <ccc>
<ccc>2</ccc>


ファイルの行結合を利用してデータを置き換える。【awk】

「apple 100円」「orange 200円」の価格データを「apple 300円」「orange 400円」に置き換える。

testuser$ cat test.txt
apple,100
orange,200
testuser$ cat test2.txt
300
400
testuser$ paste -d , test.txt test2.txt | awk -F , '{print $1 "," $3}'
apple,300
orange,400


行番号を付加してデータを表示する。【awk】

各行の先頭に「0001:」から始まる行番号を付加してデータを出力する。

testuser$ cat test.txt
aaa
bbb
ccc
testuser$ awk '{printf"%04d:%s\n",NR,$0}' test.txt
0001:aaa
0002:bbb
0003:ccc


文字列を日付形式に変更して表示する。【awk】

6桁の数字をスラッシュ区切りの日付形式(YYYY/MM/DD)に変更して出力する。

testuser$ cat test.txt
20110213
20110214
20110215
testuser$ sed 's;^\([0-9]\{4\}\)\([0-9][0-9]\)\([0-9][0-9]\);\1/\2/\3;' test.txt
2011/02/13
2011/02/14
2011/02/15


時刻を秒に変換して表示する。【awk】

時分秒「hh:mm:ss」を秒に変換して表示する。

testuser$ cat test.txt
09:50:12
13:30:05
21:22:15
testuser$ awk -F : '{printf("%d\n",$1*3600+$2*60+$3);}' test.txt
35412
48605
76935


最短マッチで置換する。【sed】

1つめのタグを「zzz」に置換する。

testuser$ cat test.txt
<a=111><b=222><c=333>
testuser$ sed 's/<[^<]*>/zzz/' test.txt
zzz<b=222><c=333>

ちなみに、こうすると最長マッチになってしまいます。

testuser$ cat test.txt
<a=111><b=222><c=333>
testuser$ sed 's/<.*>/zzz/' test.txt
zzz



【オススメ】
以下のamazonリンクから購入すると齋藤緒のページ作りパワーが劇的にアップします。


重複する行を削除して表示する。【awk】

uniqコマンドと同等。sortされていることが前提。

testuser$ cat test.txt
aaa
aaa
bbb
ccc
ccc
testuser$ awk 'NR==1||prev!=$0;{prev=$0}' test.txt
aaa
bbb
ccc


複数ファイル内の文字列を置換する。【csh,sed】

txtファイル内の全ての「aaa」を「zzz」に置き換える。

testuser$ cat test.txt
aaa bbb ccc
ccc bbb aaa
testuser$ cat test2.txt
eee fff ggg
ccc bbb aaa
testuser$ cat test.csh
#!/bin/csh
foreach fileName ( `ls *.txt` )
    sed -e 's/aaa/zzz/g' $fileName > temp
    mv temp $fileName
end
testuser$ csh test.csh
testuser$ cat test.txt
zzz bbb ccc
ccc bbb zzz
testuser$ cat test2.txt
eee fff ggg
ccc bbb zzz



応援サイト
仕事支援csh
ポコパーン


inserted by FC2 system