[英]Extract few matching strings from matching lines in file using sed
我有一個類似這樣的字符串的文件:
abcd u'current_count': u'2', u'total_count': u'3', u'order_id': u'90'
我必須為每一行文件找到 current_count 和 total_count 。 我正在嘗試下面的命令,但它不起作用。 請幫忙。
grep current_count file | sed "s/.*\('current_count': u'\d+'\).*/\1/"
它正在輸出整行,但我想要這樣的東西:
'current_count': u'3', 'total_count': u'3'
它正在打印整行,因為s
命令中的模式不匹配,因此不會發生替換。
sed
表達式不支持\\d
代表數字,或x+
代表xx*
。 GNU sed 有一個-r
選項來啟用擴展正則表達式支持,因此+
將是一個元字符,但\\d
仍然不起作用。 GNU sed 還允許\\+
作為基本正則表達式模式中的元字符,但這不是 POSIX 標准。
所以無論如何,這將起作用:
echo -e "foo\nabcd u'current_count': u'2', u'total_count': u'3', u'order_id': u'90'" |
sed -nr "s/.*('current_count': u'[0-9]+').*/\1/p"
# output: 'current_count': u'2'
請注意,我使用sed -ns///p
跳過了 grep。 我也可以使用/current_count/
作為地址:
sed -r -e '/current_count/!d' -e "s/.*('current_count': u'[0-9]+').*/\1/"
或者只用 grep 打印模式的匹配部分,而不是整行:
grep -E -o "'current_count': u'[[:digit:]]+'
(或 egrep 而不是 grep -E)。 我忘記了grep -o
是否是 POSIX 要求的行為。
對我來說,這看起來像是某種序列化的 Python 數據。 基本上我會嘗試找出該數據的來源並正確解析它。
然而,雖然是 hackish,但sed
也可以在這里使用:
sed "s/.*current_count': [a-z]'\([0-9]\+\).*/\1/" input.txt
sed "s/.*total_count': [a-z]'\([0-9]\+\).*/\1/" input.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.