使用sed删除字符串部分

时间:2016-08-19 17:44:39

标签: bash sed terminal

您好我正在尝试使用sed命令删除部分字符串,但看起来我遇到的所有选项堆栈溢出似乎都无法正常工作。

sub-285345_task-WM_dir-28_epi.nii
sub-285345_task-LANGUAGE_dir-11_epi.nii.gz

我想删除_task-***部分内容。我想删除任务 - **,键值对。

sed s/_task-.*//g 

这会删除任务后的dir - **。 sub-285345_epi.nii.gz

如何只删除任务键值对?

3 个答案:

答案 0 :(得分:1)

执行:

sed 's/_task-[^_]*//' 

[^_]*将匹配下一个_

示例:

$ sed 's/_task-[^_]*//' <<<'sub-285345_task-WM_dir-28_epi.nii'
sub-285345_dir-28_epi.nii

$ sed 's/_task-[^_]*//' <<<'sub-285345_task-LANGUAGE_dir-11_epi.nii.gz'
sub-285345_dir-11_epi.nii.gz

答案 1 :(得分:0)

.*贪婪。

尝试类似

的内容
$ echo sub-285345_task-WM_dir-28_epi.nii | sed -r 's/_task-.*?_dir/_dir/'
sub-285345_dir-28_epi.nii

答案 2 :(得分:0)

下划线似乎是一个分界符。在这种情况下,您可以使用

echo "sub-285345_task-WM_dir-28_epi.nii" | cut -d"_" -f1,3-