我想從以下txt文件我想用sed命令
$ cat sample
user_id=1234 /battle/start
我運行下面的sed命令
$ cat sample | sed 's|.*\(/.*\)|\1|g'
/start
但提取/battle/result
提取特定的字符,結果被刪除/battle
,所以我無法按照我的意願提取它。
它有什麼問題?
我想從以下txt文件我想用sed命令
$ cat sample
user_id=1234 /battle/start
我運行下面的sed命令
$ cat sample | sed 's|.*\(/.*\)|\1|g'
/start
但提取/battle/result
提取特定的字符,結果被刪除/battle
,所以我無法按照我的意願提取它。
它有什麼問題?
Sed試圖做一個貪婪的(最大)匹配,因此.*
匹配您的整個行,但不包括第二個/
。
嘗試:
< sample sed 's|.* \(/.*\)|\1|g'
或
< sample sed 's|[^/]*\(/.*\)|\1|g'
在您的RE *爲貪婪吞噬/battle
部分,你可以嘗試反轉邏輯和刪除的/
面前的一切:
cat sample | sed 's/[^/]*//'
這裏[^/]*
比賽這不是/
並且沒有任何東西取而代之。
可以刪除所有字符去年空間:
$ sed 's/.* //' <<< "user_id=1234 /battle/start"
/battle/start
或使用cut
:
$ cut -d' ' -f2 <<< "user_id=1234 /battle/start"
/battle/start
echo user_id=1234 /battle/start |grep -oP '\s\K.*'
/battle/start
echo user_id=1234 /battle/start |sed -r 's/(^.*\s)(.*)/\2/g'
/battle/start
有你堅持使用'sed'任何理由? 'cut'和'awk'更適合這個任務。 –
但是這個樣本可以通過使用cut或awk來提取,實際上我想從nginx的訪問日誌中提取 –