1
ファイルの実行を置き換える:私は空白(スペースや改行)の連続した実行を交換したいPerlはregexs:空白はスペースや改行でのみ構成さの<code>bar</code>スペースや改行
$ cat bar
1, 2,
3,
4
S
で、すなわち希望出力は次のとおりです。
1,S2,S3,S4S
はしかし、すべての私の試みは\n
が1 S
によって置き換えられているになり、そしてすぐに、それは別のS
に置き換え従っスペース:
$ cat bar | perl -pe 's/\s+/S/g'
1,S2,SS3,S4S
$ cat bar | perl -pe 's/\s+/S/gm'
1,S2,SS3,S4S
$ cat bar | perl -pe 's/\s+/S/gms'
1,S2,SS3,S4S
$ cat bar | perl -pe 's/[ \n]+/S/gms'
1,S2,SS3,S4S
$ cat bar | perl -pe 's/[ \n]+/S/gm'
1,S2,SS3,S4S
$ cat bar | perl -pe 's/[ \n]+/S/g'
1,S2,SS3,S4S
これらはすべて私が考えることができる、関連する正規表現のフラグの組み合わせです:/g
(グローバル置換)、/s
(.
マッチ改行を聞かせて)、および/m
(複数行)。私はいつも3
の前にSS
を持っています。ここではちょうどS
がほしいと思っています。
ご協力いただければ幸いです。
'-0777'、TIL!今度は –
のように、 '-0'は' -0777'と同様に動作しませんか?ここに私の例があるようです。 私はのための可能な意味合いで、それについての議論は[こちら](http://www.perlmonks.org/?node_id=269283)と[ここ](http://stackoverflow.com/a/9671078/544236)を参照してくださいユニコードの取り扱いは、どちらか一方がより理にかなっているのかどうかは分かりません。 –
@RyanWilliams '-0'は、入力にnullバイトが含まれていない限り動作します。この場合、大丈夫です。 '-0777'は入力に含まれる文字にかかわらず常にファイル全体をスラップするので、より良いです。また、 '-0777'は慣習的に" slurp "を意味するので、経験豊かなPerlプログラマは意図的にヌルバイトで分割しているのかどうかわからなくても、一目で何をしているのか理解することができます。 – ThisSuitIsBlackNot