2015-07-21 38 views
1

我正在嘗試編寫一個bash腳本來查找文件中的所有佔位符。Bash腳本在文件中查找佔位符

例如

我有以下文件:

<property name="sdfasdf" value="$ABC.D"></property> 
<property name="sadf" value="$DFG.F.G"></property> 
<property name="sadf" value="hello"></property> 
<property name="ddd" value="$HJK"></property 

,我想獲得這些:

$ABC.D 
$DFG.F.G 
$HJK 

我試過很多的選擇,但沒有成功。

有人可以幫助我嗎?

回答

2

可以grep這些值和佔位符,並進一步grep來獲取符號名稱。

例如

$ grep -o 'value="$.\+"' input.txt | grep -oE '\$(\w|\.)+' 
$ABC.D 
$DFG.F.G 
$HJK 

注意:假定有每行僅有一個佔位符值


細節

  • O標誌只將匹配打印到模式
  • 擴展正則表達式的E標誌用於匹配單詞或。
+0

謝謝!那麼當有一行時:我想在這種情況下獲得$ ABC.D。 –

+0

編輯滿足新要求 – amdixon

+0

幹得好!感謝您的幫助。 –

2

您可以使用sed的

sed -n 's/.*value="\($[\.a-zA-Z]*\)".*/\1/p' ./input.txt 

其中input.txt中文件包含的文本。

這裏我們使用替換組來打印實際匹配(而不是整個匹配行)。

+0

謝謝,但當文件中有行時,它將不起作用。 –

+0

啊!現在我看到:你想排除沒有美元符號的條目...好吧,更新。順便說一下,我更新了我的答案,以處理包含點的額外輸入行...... –

1
sed -nr 's%(\$[A-Za-z][A-Za-z.]*)%\n\1\n%gp' test | grep '^\$[A-Za-z][A-Za-z.]*' 

這是爲了找到佔位符,獨立的是否存在是每行,以及是否只有一個佔位符有「值=」靠近它上下文通用方法。所有佔位符都將打印在STDOUT上。