我寫了一個 awk 命令:
awk -F: '$1=="tag" {print $1;}' setup.py
我想在引號中列印標簽后的所有內容。
樣本輸入:
import tools
tools.setup(
name='test',
tag="0.0.8",
packages=tools.ges(),
line xyz
)
輸出:
0.0.8
我試圖在標記后輸出所有內容,但我什至無法讓它作業。
uj5u.com熱心網友回復:
第一個解決方案:使用您顯示的示例,請嘗試以下awk程式。使用match函式awk來匹配正則運算式tag="[^"]*,它將匹配從 tag=' 到下一次出現 ' 之前的所有內容。列印時僅列印匹配部分的子字串,并洗掉不需要的部分以僅獲取版本部分。
awk 'match($0,/tag="[^"]*/){print substr($0,RSTART 5,RLENGTH-5)}' Input_file
第二種解決方案:使用 GNUgrep請嘗試以下操作。oP在 GNUgrep中使用選項,其中P選項負責啟用 PCRE 正則運算式。在主程式中匹配 tag=" 然后使用\K選項忘記匹配的值并在下一次出現之前匹配"將列印匹配的值。
grep -oP 'tag="\K[^"]*' Input_file
第三個解決方案:使用 GNUsed請嘗試以下解決方案。使用其中的-E選項sed將在程式中啟用 ERE(擴展正則運算式)。使用-n選項停止列印行,直到我們明確提到列印。在主程式中,替換匹配值,這是標記之前的所有內容,并在此處創建第一個也是唯一的反向參考,其中包含"..."2 個雙引號之間的所有內容,并在執行替換時僅用支持的參考值替換它并使用p選項列印匹配值。
sed -E -n 's/.*tag="([^"]*).*/\1/p' Input_file
uj5u.com熱心網友回復:
使用gnu awk,您還可以將tag=與字串開頭的前導可選空格匹配,并在捕獲組中捕獲標簽版本。
ary[1] 在示例代碼中包含組 1 值。
模式^[[:blank:]]*tag="([0-9] (\.[0-9] )*)"匹配:
^字串的開始[[:blank:]]*匹配可選的空格或制表符tag="字面匹配(捕獲組 1[0-9] (\.[0-9] )*匹配.1 位數字并可選擇重復 a和 1 位數字
)關閉第 1 組"匹配閉幕"
呆呆的例子:
awk 'match($0, /^[[:blank:]]*tag="([0-9] (\.[0-9] )*)"/, ary) {print ary[1]}' setup.py
輸出
0.0.8
uj5u.com熱心網友回復:
一個更簡單的解決方案awk可能是:
awk -F'"' '/[[:digit:]]/{print $2}' file
0.0.8
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359022.html
