トップ «前の日記(2010-02-17) 最新 次の日記(2010-02-20)» 編集

日々の破片

著作一覧

2010-02-19

_ grepで---

テキストファイルの区切りに----とか入れていて、それがえらく大きなサイズになったとする。というか、なった。

で、どれだけのフラグメントがあるのか、----の数を調べようと、

grep ---- foobar.txt

とやると「そんなオプションは知らん」とgrepが文句を垂れる。

ああ、そうか、と納得して、

grep '----' foobar.txt

とやっても「そんなオプションは知らん」とgrepが文句を垂れる。

むむと、

grep "----" foobar.txt

とやっても「そんなオプションは知らん」とgrepが文句を垂れる。

まあ、""はだめだろうとは思ったが、それではと

grep \-\-\-\- foobar.txt

とやっても「そんなオプションは知らん」とgrepが文句を垂れる。

途方に暮れた。

で、なんとなく

grep '\-\-\-\-' foobar.txt

とやったら、処理してくれた。

さて、どこからどこまでがbashの仕業でどこからどこまでがgrepの考慮なんだろうか。

たぶん、''の中身をそのまま送るのはbash。したがって、\-\-\-\-はbashがエスケープを処理するので、grepには----が与えられて、そんなオプションは……となる。しかし'\-\-\-\-'ではbashはそのままgrepに送り、grepは-で始まっていないので検索文字列としてエスケープ処理して、無事動いた、のだと思う。

本日のツッコミ(全2件) [ツッコミを入れる]
_ knu (2010-02-19 00:52)

grep -e ---- foo.txt または grep -- ---- foo.txt が正解。<br>-e は次に来る引数を検索パターンとせよというオプション、 -- はそれ以降フラグは来ないと宣言するオプションです。

_ arton (2010-02-19 02:32)

なるほど。どうもありがとうございます。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え