我想知道如何从命令行搜索获取各种.rb类型文件中的字符串。
替换:
.delay([ANY OPTIONAL TEXT FOR DELETION]).
带
.delay.
除了sed awk之外,操作系统中还包含其他任何更适合该任务的命令行工具吗?
状态
到目前为止,我有以下正则表达式:
.delay\(*.*\)\.
我想知道如何只匹配第一个右括号结尾的表达式?并避免更换:
.delay([ANY OPTIONAL TEXT FOR DELETION]).sometext(param)
提前致谢!
答案 0 :(得分:2)
如果您需要查找和替换文件中的文本 - sed
似乎是最好的命令行解决方案。
在文本文件中搜索字符串并替换:
sed -i 's/PATTERN/REPLACEMENT/' file.name
或者,如果您需要处理文件中PATTERN
的多个出现,请添加g
键
sed -i 's/PATTERN/REPLACEMENT/g' file.name
对于多个文件处理 - 将文件列表重定向到sed:
echo "${filesList}" | xargs sed -i ...
答案 1 :(得分:1)
您可以使用find
生成文件列表,并xargs
对结果运行sed
:
find . -type f -print | xargs sed -i 's/\.delay.*/.delay./'
find
将生成当前目录中包含的文件列表(.
,尽管您当然可以传递不同的目录),xargs
将读取该列表,然后运行{ {1}}以文件列表作为参数。
此处生成所有文件的列表,而不是sed
,您可以使用find
之类的内容生成包含特定术语的文件列表。 E.g:
grep
答案 2 :(得分:0)
对于问题的一部分,您希望仅匹配并替换第一个)
而不包含第二对()
,以下是如何更改正则表达式:
.delay\(*.*\)\.
- >
\.delay\([^\)]*\)
即。匹配"实际点,延迟,支撑打开,一切但支撑关闭和支撑关闭"。
E.g。使用sed:
>echo .delay([ANY OPTIONAL TEXT FOR DELETION]).sometext(param) | sed -E "s/\.delay\([^\)]*\)/.delay/"
.delay.sometext(PARAM)
我建议使用grep来查找正确的文件:
grep -rl --include "*.rb" '\.delay' .
然后按照其他答案的建议将列表输入xargs。
相信其他答案提供了将多个文件输入sed的解决方案。