繁体   English   中英

红宝石一线可匹配多行

[英]Ruby one liner to match multiple lines

我有一个具有以下内容的文本文件。

one two three
four five six
seven eight nine
ten eleven twelve

我正在尝试将以下Ruby代码转换为Ruby One Liner命令,在其中将两行(四五六和七八九)替换为空白。

input = File.new('./test', 'r+')
content = input.read
input.close

modified = content.sub("four five six\nseven eight nine", "")
print modified

我尝试过类似的方法,但是没有运气。

ruby -pe 'gsub(/four five six\nseven eight nine/,"")' < ./test

任何想法? 谢谢!

-p标志使Ruby“假设'while gets(); ... end'围绕您的脚本循环”(来自ruby -h ),因此在每一行分别运行命令,然后输出输出。 相反,执行一个显式的gets(nil)使其立即接受整个输入,然后调用puts (并在正则表达式的末尾添加另一个\\n ,这样就不会留空行):

ruby -e 'puts gets(nil).gsub(/four five six\nseven eight nine\n/,"")' < ./test
one two three
ten eleven twelve

快速理智检查; Ruby匹配换行符没有问题:

2.0.0-p195 :159 > /abc\ndef/ === "abc\ndef"
 => true 

有一些警告(如果希望.匹配\\n !,请使用m修饰符)

2.0.0-p195 :161 > /.{7}/ === "abc\ndef"
 => false 
2.0.0-p195 :162 > /.{7}/m === "abc\ndef"
 => true 

也许您在行尾有一些空格或其他东西,所以请在正则表达式中加以考虑( /four five six\\s*\\nseven eight nine/m

尝试使用正则表达式“或”: /(four five six|seven eight nine)/ 在命令行中,通常是逐行读取文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM