次の内容のファイルがあります。
(((jfojfojeojfow
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld
かっこで始まるすべての行を抽出するにはどうすればよいですか?
行頭の記号は^
です。したがって、最初の文字が(
であるすべての行を印刷するには、^(
に一致させる必要があります。
grep
grep '^(' file
sed
sed -n '/^(/p' file
Perl
を使用
Perl -ne '/^\(/ && print' foo
出力:
(((jfojfojeojfow
(((jfojfojeojfow
説明(正規表現部分)
/^\(/
^
文字列の開始位置をアサートします\(
は文字(
と文字通り一致しますbash
one linerは次のとおりです。
while IFS= read -r line; do [[ $line =~ ^\( ]] && echo "$line"; done <file.txt
ここでは、入力の各行を読み込んでおり、行が(
で始まる場合、行が出力されます。メインテストは[[ $i =~ ^\( ]]
によって行われます。
python
を使用:
#!/usr/bin/env python2
with open('file.txt') as f:
for line in f:
if line.startswith('('):
print line.rstrip()
ここでline.startswith('(')
は、行が(
で始まるかどうかをチェックします。そうであれば、行が印刷されます。
awk '/^\(/' testfile.txt
結果
$ awk '/^\(/' testfile.txt
(((jfojfojeojfow
(((jfojfojeojfow
pythonワンライナーとして:
$ python -c 'import sys;print "\n".join([x.strip() for x in sys.stdin.readlines() if x.startswith("(")])' < input.txt
(((jfojfojeojfow
(((jfojfojeojfow
または、代わりに:
$ python -c 'import sys,re;[sys.stdout.write(x) for x in open(sys.argv[1]) if re.search("^\(",x)]' input.txt
look
は、AT&T Unixバージョン7で登場した古典的だがあまり知られていないUnixユーティリティの1つです。man look
から:
Lookユーティリティは、接頭辞として文字列を含むファイル内のすべての行を表示します
結果:
$ look "(" input.txt
(((jfojfojeojfow
(((jfojfojeojfow
逆も可能です。
grep -v '^[^(]' file
または
sed '/^[^(]/d' file
これにはgrepコマンドを使用します。上記の内容のファイルがt.txtと呼ばれると仮定します。
user:~$ grep '^(' t.txt
(((jfojfojeojfow
(((jfojfojeojfow
追加の引数として「--color」を使用すると、端末で何が一致するかを色で確認することもできます。この命令は、空の行にも一致しません。