2017-01-04 147 views
0

對不起,我剛剛開始並且無法在其他任何地方找到合適的答案。基本上,我有一個保存爲純文本的HTML文件,並且我想從一行中拉出一個字符串。該生產線是這樣的:從HTML文件中提取字符串

<li><strong>Password: XXXXXX</strong></li>

首先,這是該行,我想拉的第二個實例。而我唯一想要的部分是XXXXXX。除了XXXXXX之外,我希望刪除文件中的所有其他內容。字符串經常變化,所以我不能僅僅爲此而煩惱。謝謝你的幫助。

回答

0

這樣的事情應該工作:

cat c.txt |grep "Password:"|awk '{print $2}'|awk -F "<" '{print $1}'|sed -n 2p 
+0

正是我在找什麼,謝謝! – sullivnc

+1

@sullivnc最好至少等上幾個小時才能接受答案,因爲經常你得到的第一個答案不是最好的答案,但是一旦答案已被接受,你的問題就會比其他答案更少。在這種情況下,你接受的答案有一個UUOC和一個由4個獨立命令組成的管道,當它們執行時會給出各種不同的密碼值,所以它不是一個很好的解決方案,實際上你到目前爲止收到的其他答案都是比這個更好。 –

0

@sullivnc,你可以請嘗試以下,讓我知道,如果這可以幫助你。

echo your_Input_line_here | awk '{gsub(/.*Password: |<\/.*/,X,$0);print}' 

這將比aggaton建議的更短,更快。

+1

請停止混淆您的代碼,並使用未初始化的變量('X')而不是簡單的空字符串('「」')使其變得脆弱。你不需要',$ 0',因爲這是默認的。 OP希望第二次出現的密碼不是每一次出現,都不要求每一行都要打印。 –

+1

另外,如果OP確實想要打印每一行 - 這將從每行刪除'

+1

@ EdMorton-我在這裏感謝您的寶貴意見。我將不會嘗試將來再次提出這個問題,感謝您提供寶貴的指導。 – RavinderSingh13

2
$ cat file 
<li><strong>Password: AAAAAA</strong></li> 
<li><strong>Password: XXXXXX</strong></li> 
<li><strong>Password: ZZZZZZ</strong></li> 

$ awk 'sub(/.*<li><strong>Password: /,"") && sub(/<\/strong><\/li>.*/,"") && ++c==2' file 
XXXXXX 
+0

這沒有奏效。我只是從捲曲中輸入文本,而不是寫任何文件。我不認爲這會造成問題,所以不知道爲什麼它不起作用。 – sullivnc

+0

它以什麼方式「不起作用」?沒有輸出,錯誤的輸出,錯誤信息,還有其他的東西?捲曲管道對讀取文件沒有任何影響。你確定你的輸入是你發佈的格式嗎?你確定在輸入中至少有2次出現正則表達式嗎? –

+0

沒有輸出。我試着將它轉發到一個文件,而不是試圖在標準輸出中看到它,但仍然沒有。我複製並粘貼它,只是改變awk如何接收字符串。是的,肯定有兩次正則表達式。 – sullivnc

0

只要糾正行NR。

awk -F'[: <]' 'NR == 1 {print $5}' file 
XXXXXX