Unix:用分隔符剪切一个字符串

时间:2016-11-08 21:45:33

标签: shell unix

我使用下面的命令根据分隔符剪切字符串。但我希望输出与分隔符一起打印。

示例字符串: test_file.txt

命令:

echo "test_file.txt" | cut -sd_ -f1

当前输出:测试

预期输出:test _

编辑:如果字符串不包含分隔符,我使用cut -sd报告null。所以如果分隔符不存在,我也应该输出为null。

3 个答案:

答案 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_

这将打印从行首到第一个分隔符(_)的任何内容,包括分隔符。