正则表达式的麻烦

时间:2013-06-20 08:33:04

标签: regex shell

我想要一些关于扩展正则表达式的帮助。 我一直想弄清楚但是徒劳无法

我有一个文件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”之前和之后可以有任意数量的空格,因为此文件是解析前一个文件的结果。

谢谢!

3 个答案:

答案 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更好的工具 - 如果你使用其中一个,你需要逃避正斜杠。