我想要一些关于扩展正则表达式的帮助。 我一直想弄清楚但是徒劳无法
我有一个文件conflict.txt看起来像这样请注意它只是这个文件的一部分,有很多这样的行
Server/core/wildSetting.json
Server/core
Client/arcade/src/assets
Client/arcade/src/assets/
Client/arcade/src/assets
Client/arcade/src/Game/
我正在编写一个shell脚本,逐行扫描这个文件:
if [ -s "$CONFLICTS" ] ; then
count=0
while read LINE
do
let count++
echo -e "\n $LINE \n"
done < $CONFLICTS
fi
上面逐行打印文件我正在尝试的是将具有特定文本的行重定向到其他文件中,因为我修改了代码的回显行:
echo -e "\n $LINE \n" | grep -E "Server/game" > newfile.txt
我的查询:
正如我们所看到的,Server / Core形式有很多行...... 我想写一个正则表达式并在grep中使用它,它匹配两种行
1)包含ONLY字符串“Server / core”的行s被取代并被任意数量的空格所取代
2)包含字符串“assets”的所有行
我已经写了相同的正则表达式,但它不起作用
这里是我的注册表:
grep -E '[^' '*Server/core$] | [assets]'
你能告诉我这样做的正确方法吗?
请注意,“Server / core”之前和之后可以有任意数量的空格,因为此文件是解析前一个文件的结果。
谢谢!
答案 0 :(得分:1)
sed
(Stream EDitor)可以完美地解决您的问题。
尝试此命令sed -n '/^ *Server\/core\|assets/p' conflicts.txt
。
您的grep -E '[^' '*Server/core$] | [assets]'
有问题。
方括号中的^
省略括号中包含任何后续字符的所有字符串。
如果要执行就地修改,请将-i
选项添加到sed命令中
sed -in '/^ *Server\/core\|assets/p' conflicts.txt
答案 1 :(得分:1)
根据提问in the comments:
1)包含字符串“assets”的行
$ grep "assets" file
Client/arcade/src/assets
Client/arcade/src/assets/
Client/arcade/src/assets
2)只包含刺痛“服务器/核心”的行先行,并以任意数量的空间成功
$ grep "^[ ]*Server/core[ ]*$" file
Server/core
答案 2 :(得分:0)
你的正则表达式只需要这样:
assets|^\s*Server/Core\s*$
我认为sed或awk是比grep更好的工具 - 如果你使用其中一个,你需要逃避正斜杠。