我使用下面的命令根据分隔符剪切字符串。但我希望输出与分隔符一起打印。
示例字符串: test_file.txt
命令:
echo "test_file.txt" | cut -sd_ -f1
当前输出:测试
预期输出:test _
编辑:如果字符串不包含分隔符,我使用cut -sd报告null。所以如果分隔符不存在,我也应该输出为null。
答案 0 :(得分:2)
如果您使用的是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_
答案 1 :(得分:0)
您无法使用cut
执行此操作,但可以使用sed
执行此操作:
$ echo "test_file.txt" | sed 's/\([^_]*_\).*$/\1/'
test_
如果没有_
,你根本不想要打印任何东西,最简单的方法可能是分开清除这些线,
$ echo "test_file.txt" | sed '/^[^_]*$/d; s/\([^_]*_\).*$/\1/'
答案 2 :(得分:0)
echo "test_file.txt" |grep -oP '^.*?_'
test_
这将打印从行首到第一个分隔符(_
)的任何内容,包括分隔符。