簡體   English   中英

正則表達式的麻煩

[英]Troubles with regular expressions

我想要一些關於擴展正則表達式的幫助。 我一直想弄清楚但是徒勞無功

我有一個文件conflicts.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”之前和之后可以有任意數量的空格,因為此文件是解析前一個文件的結果。

謝謝 !

sed (Stream EDitor)可以完美地解決您的問題。

試試這個命令sed -n '/^ *Server\\/core\\|assets/p' conflicts.txt

你的grep -E '[^' '*Server/core$] | [assets]' grep -E '[^' '*Server/core$] | [assets]' 方括號中的^省略了包含括號中任何后續字符的所有字符串。

如果要執行就地修改,請在sed命令中添加-i選項,如sed -in '/^ *Server\\/core\\|assets/p' conflicts.txt

根據評論中的要求:

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

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

2)僅包含刺激“服務器/核心”的行,並且任何數量的空間都會成功

$ grep "^[ ]*Server/core[ ]*$" file
        Server/core

你的正則表達式只需要這樣:

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

我認為sed或awk將是一個比grep更好的工具 - 如果你使用其中一個,你需要逃避正斜杠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM