您好我正在尝试使用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
如何只删除任务键值对?
答案 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-