0

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

我有一个文件 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) line s 只包含字符串“Server/core”,前面和后面有任意数量的空格

2) 包含字符串“assets”的所有行

我已经为此编写了一个正则表达式,但它不起作用

这是我的正则表达式:

grep -E   '[^' '*Server/core$] | [assets]' 

你能告诉我正确的做法是什么吗?

请注意,“Server/core”前后可以有任意数量的空格,因为该文件是解析前一个文件的结果。

谢谢 !

4

3 回答 3

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

于 2013-06-20T08:43:51.997 回答
1

根据评论中的要求:

1) 包含字符串“assets”的行

$ grep "assets" file
       Client/arcade/src/assets
     Client/arcade/src/assets/
       Client/arcade/src/assets

2) 仅包含 sting "Server/core" 的行在前面并成功了任意数量的空间

$ grep "^[ ]*Server/core[ ]*$" file
        Server/core
于 2013-06-20T08:46:42.177 回答
0

你的正则表达式只需要这样:

assets|^\s*Server/Core\s*$

我认为 sed 或 awk 将是比 grep 更好的工具 - 如果您使用其中之一,则需要转义正斜杠。

于 2013-06-20T08:46:57.140 回答