我有像下面这样的字符串,只能使用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
答案 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