Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題44

問題44 行またぎの検索

問題のファイルは

https://github.com/shellgei/shellgei160

からダウンロードできる。

シェルスクリプトという文字列の一部が含まれている行の末尾に@を加える問題だった。練習問題でやった方法で改行をまたぐ文字列を検索するところは分かったが、目印をどう入れるかがわからずに解けなかった。

解答例は

sed -Ez 's/シ.?ェ.?ル.?ス.?ク.?リ.?プ.?ト/%&%/g' diary.txt | sed '/%/s/$/ @/;s/%//g'

となる。問題の文字列を%%で囲って、%のある行の末尾に@を加えるというアイデアで解決している。最後の sed の用法は

The following command replaces the word 'hello' with 'world' only in lines containing the word 'apple':

     sed '/apple/s/hello/world/' input.txt > output.txt

という仕様に準じている。