[英]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.