从右侧修剪一个字符串到第四个分隔符

时间:2017-02-28 19:16:01

标签: linux bash unix awk

我有像下面这样的字符串,只能使用unix命令(bash)

进行解析
49_sftp_mac_myfile_simul_test_9999_4000000000000001_2017-02-06_15-15-26.49.csv.failed

我想从上方/右侧修剪上面的字符串到第4个下划线。所以输出应该是

49_sftp_mac_myfile_simul_test

下划线的数量可能因整体字符串而异。例如,字符串可以是

49_sftp_simul_test_9999_4000000000000001_2017-02-06_15-15-26.49.csv.failed

输出应该是(在从右边修剪第4次下划线之后。

49_sftp_simul_test

5 个答案:

答案 0 :(得分:3)

使用递减awk的{​​{1}}轻松完成,即没有。将输入+输出字段分隔符设置为下划线后,将字段设置为-4:

NF

答案 1 :(得分:2)

您可以使用bash' parameter expansion

string="..."
echo "${string%_*_*_*_*}"

答案 2 :(得分:1)

使用GNU sed:

$ sed -E 's/(_[^_]*){4}$//' <<< "49_sftp_mac_myfile_simul_test_9999_4000000000000001_2017-02-06_15-15-26.49.csv.failed"
49_sftp_mac_myfile_simul_test

从第一行开始,删除4次出现_后跟非_个字符。

答案 3 :(得分:1)

Perl one-liner

`In file included from /home/ashutosh/opencv-3.0.0/build/modules/viz/opencv_viz_pch_dephelp.cxx:1:0:
/home/ashutosh/opencv-3.0.0/modules/viz/src/precomp.hpp:119:26: fatal error: vtkSTLWriter.h: No such file or directory
compilation terminated.

输入

echo $your-string | perl -lne '$n++ while /_/g; print join "_",((split/_/)[-$n-1..-5])'

输出
49_sftp_mac_myfile_simul_test_9999_4000000000000001_2017-02-06_15-15-26.49.csv.failed

输入

49_sftp_mac_myfile_simul_test

输出

49_sftp_simul_test_9999_4000000000000001_2017-02-06_15-15-26.49.csv.failed

答案 4 :(得分:0)

不是最快但也许最容易记住和最有趣的事情:

echo "49_sftp_mac_myfile_simul_test_9999_4000000000000001_2017-02-06_15-15-26.49.csv.failed"| 
   rev | cut -d"_" -f5- | rev