Ruby一行匹配多行
我有一个包含以下内容的文本文件Ruby一行匹配多行,ruby,regex,Ruby,Regex,我有一个包含以下内容的文本文件 one two three four five six seven eight nine ten eleven twelve 我正在尝试将下面的Ruby代码转换为Ruby单行命令,在该命令中,它将两行(四五六行和七八九行)替换为空白 input = File.new('./test', 'r+') content = input.read input.close modified = content.sub("four five six\nseven eigh
one two three
four five six
seven eight nine
ten eleven twelve
我正在尝试将下面的Ruby代码转换为Ruby单行命令,在该命令中,它将两行(四五六行和七八九行)替换为空白
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
ruby-pe'gsub(/四五六\n七八九/,“”)
有什么想法吗?谢谢 试试正则表达式“or”:
/(四五六|七八九)/
。在命令行上出现这种情况时,通常会逐行读取文件。尝试使用regex“or”:/(四五六|七八九)/
。在命令行上出现这种情况时,通常会逐行读取文件。快速健全性检查;Ruby匹配新行时没有问题:
2.0.0-p195 :159 > /abc\ndef/ === "abc\ndef"
=> true
有一些注意事项(如果希望
匹配\n
!,请使用m
修饰符)
也许在行尾有一些空格或其他东西,所以在正则表达式中要考虑到这一点(
/four-five-six*\nseven-eight-nine/m
)快速健全性检查;Ruby匹配新行时没有问题:
2.0.0-p195 :159 > /abc\ndef/ === "abc\ndef"
=> true
有一些注意事项(如果希望
匹配\n
!,请使用m
修饰符)
也许在行的末尾有一些空格或其他东西,所以在正则表达式(
/four-five-six*\nseven-eight-nine/m
)中考虑到这一点,-p
标志使Ruby在脚本周围“假定”while-get();…end“循环”(fromRuby-h
),从而在每行上分别运行命令,然后打印输出。相反,执行一个显式操作,使其立即接收整个输入,然后调用将
放在上面(并在正则表达式末尾添加另一个\n
,这样它就不会留下一个空行):
ruby-e'put-get(nil).gsub(/四五六\n七八九/,“”)
标记-p
会使Ruby在脚本周围“假定”while get();…结束”循环(来自Ruby-h
),从而在每一行上分别运行命令,然后打印输出。相反,执行一个显式操作,使其立即接收整个输入,然后调用将
放在上面(并在正则表达式末尾添加另一个\n
,这样它就不会留下一个空行):
ruby-e'put-get(nil).gsub(/四五六\n七八九/,“”)
也许一个正则表达式“或”会有所帮助:/(四五六|七八九)/
。在命令行这样的情况下,通常会逐行读取文件。为什么是“一行”?这是人为的限制,可能不是最好的方式。您想要“空白”还是要截断匹配的文本?你正在截断,但说你想要“空白”,这是一个模糊的术语。还有,为什么不直接使用sed
,它会运行得快得多?也许一个regex“或”会有帮助:/(四五六|七八九)/
。在命令行这样的情况下,通常会逐行读取文件。为什么是“一行”?这是人为的限制,可能不是最好的方式。您想要“空白”还是要截断匹配的文本?你正在截断,但说你想要“空白”,这是一个模糊的术语。而且,为什么不直接使用运行速度快得多的sed
?
ruby -e 'puts gets(nil).gsub(/four five six\nseven eight nine\n/,"")' < ./test
one two three
ten eleven twelve