我正在使用下面的命令根據分隔符剪切字符串。但我希望輸出與分隔符一起打印。Unix:與分隔符一起剪切字符串
樣品字符串: test_file.txt
命令:
echo "test_file.txt" | cut -sd_ -f1
電流輸出:測試
預期輸出:TEST_
編輯:我使用剪切 - 如果字符串不包含分隔符,sd將報告null。所以如果分隔符不存在,我應該輸出爲null。
我正在使用下面的命令根據分隔符剪切字符串。但我希望輸出與分隔符一起打印。Unix:與分隔符一起剪切字符串
樣品字符串: test_file.txt
命令:
echo "test_file.txt" | cut -sd_ -f1
電流輸出:測試
預期輸出:TEST_
編輯:我使用剪切 - 如果字符串不包含分隔符,sd將報告null。所以如果分隔符不存在,我應該輸出爲null。
如果你正在使用bash那麼就不需要外部工具:
s='test_file.txt'
[[ $s == *_* ]] && echo "${s%%_*}"_
test_
或者使用sed
:
sed -n 's/_.*/_/p' <<< "$s"
test_
或者使用awk
:
awk -F_ 'NF>1{print $1 FS}' <<< "$s"
test_
你不能用cut
做到這一點,但你可以sed
做到這一點:
$ echo "test_file.txt" | sed 's/\([^_]*_\).*$/\1/'
test_
如果你想什麼都沒有,如果沒有_
,最簡單的方法可能是雜草要打印出單獨的線,
$ echo "test_file.txt" | sed '/^[^_]*$/d; s/\([^_]*_\).*$/\1/'
感謝您的快速解決方案..我在cut命令中使用了sd,因此如果沒有分隔符存在,它會報告null。這可以通過sed來完成嗎?對於例如如果我使用testfile.txt,我應該得到輸出爲空作爲分隔符不存在。 –
我原來的命令會讓不包含'_'的行保持不變;我添加了另一個按您的要求行事的選項。 – zwol
非常感謝你:) –
echo "test_file.txt" |grep -oP '^.*?_'
test_
這將打印從線直到第一分隔符(_
),包括分隔符的開始什麼。
非常感謝你:) –
謝謝你的快速解決方案..我在cut命令中使用了sd,所以如果沒有分隔符,它會報告null。這是否也可以通過上述命令完成?對於例如如果我使用testfile.txt,我應該得到輸出爲空作爲分隔符不存在 –
是的,我編輯的答案中的所有選項都會照顧到這一點。 – anubhava
非常感謝:)乾杯 –