More from: grep

改行コードを揃えて解決

昨日、「”grep”で行の完全一致を見つける」という記事を書いた。
その後少々検討した結果、改行コードをWindows(CR+LF)に揃えることで解決した。
実際に改行コードが異なるファイルで検証してみると”-x”オプションを付けると不一致とみなされたが、揃えると(当然だが)一致とみなされたのでWindows上での扱いを考えてCR+LFに統一した。
そもそも改行を何故LFのみにしていたのか思い出せ無いが、とりあえず上手くいったので良しとしよう(汗)。

←クリックしてくれると嬉しいです。

”grep”で行の完全一致を見つける

Linux上でファイル操作をしていて、あるファイルの中から別のファイルにある行と一致する行を取り除きたい。
単純に考えると
#grep -v -f hoge.txt gesho.txt
で出来るんだけど、この場合はhoge.txtのとある行を”含む”行が全て取り除かれてしまう。
例えばgesho.txtの中身が
“This is a pen”
“This is a pencil”
の2行だったとして、hoge.txtに
“This is a pen”
があると2行とも取り除かれてしまう。
そこで、行の完全一致のオプション”-x”を付けて
#grep -v -x -f hoge.txt gesho.txt
とすれば解決・・・の筈だったんだけど、実際には一致する行が無いと判断されてしまった。
理由はhoge.txtとgesho.txtで改行コードが異なっていた為orz。
Windows上で扱う関係でgesho.txtはCR+LFでないと困るが、反対にhoge.txtはLFである必要があって統一できない。
さて、どうするかなぁ?(汗)

grepに渡す時だけ”dos2unix”で改行コードを変換して、終わったら元に戻すのが簡単かな?

←クリックしてくれると嬉しいです。

改行コードか!

Linuxファイルサーバ上のテキストファイルを操作していて特定の文字列を取り除きたかった。
そこで
grep -v -f aaa.txt bbb.txt
を実行したところがaaa.txtに書いてある文字列がbbb.txtに残ってしまう。
エディター上で文字列を見比べてもタイプミスは見当たらない。
おかしいなぁ、と思ってgrepのヘルプを見て思いついたのが改行コード。
ファイルの作成&編集はWindows10上で行っているので改行コードはCR+LF。
Linuxでは通常LFのみなので試しにaaa.txtの改行コードをLFだけにしてみたらうまくいった(bbb.txtはそのままでもOKだった)。
未だにこんなことで悩まなくてはならないなんて私もまだまだだな(汗)。

←クリックしてくれると嬉しいです。

grepでマッチしたファイル名のみ出力

unix系OSのマシンで作業していて、特定の文字列を含むファイルのみを編集したいときがある。
そんな時に便利なのがgrepコマンドの”-l”オプション。
このオプションを使うとgrepはパターンマッチしたファイル名のみを出力するので、そのファイル名をエディターに渡せば良い。
例えばエディターにvi(vim)を使う場合は
$vi(vim) `grep -l “検索文字列” 対象とするファイルを含むpath/*`
とすれば指定したpathに存在する全てのファイルから検索したい文字列を含むファイルだけを編集することが出来る。
ファイル名の指定は好きなようにすれば良いのでいろいろ応用が利いて便利だ。

←クリックしてくれると嬉しいです。