繁体   English   中英

使用sed或awk将字符串替换为下划线和点

[英]replace string with underscore and dots using sed or awk

我有一堆文件的文件名由下划线和点组成,这是一个示例:

META_ALL_whrAdjBMI_GLOBAL_August2016.bed.nodup.sortedbed.roadmap.sort.fgwas.gz.r0-ADRL.GLND.FET-EnhA.out.params

我要删除包含.bed.nodup.sortedbed.roadmap.sort.fgwas.gz.的部分.bed.nodup.sortedbed.roadmap.sort.fgwas.gz. 因此预期的文件名输出应为META_ALL_whrAdjBMI_GLOBAL_August2016.r0-ADRL.GLND.FET-EnhA.out.params

我正在使用这些sed命令,但没有一个起作用:

stringZ=META_ALL_whrAdjBMI_GLOBAL_August2016.bed.nodup.sortedbed.roadmap.sort.fgwas.gz.r0-ADRL.GLND.FET-EnhA.out.params
echo $stringZ | sed -e 's/\([[:lower:]]\.[[:lower:]]\.[[:lower:]]\.[[:lower:]]\.[[:lower:]]\.[[:lower:]]\.[[:lower:]]\.\)//g'
echo $stringZ | sed -e 's/\[[:lower:]]\.[[:lower:]]\.[[:lower:]]\.[[:lower:]]\.[[:lower:]]\.[[:lower:]]\.[[:lower:]]\.//g'

sed或awk的任何解决方案都会有很大帮助

不要将外部实用程序和正则表达式用于如此简单的任务! 请改用参数扩展

stringZ=META_ALL_whrAdjBMI_GLOBAL_August2016.bed.nodup.sortedbed.roadmap.sort.fgwas.gz.r0-ADRL.GLND.FET-EnhA.out.params
echo "${stringZ/.bed.nodup.sortedbed.roadmap.sort.fgwas.gz}"

要重命名包含.bed.nodup.sortedbed.roadmap.sort.fgwas.gz的所有文件,请使用以下命令:

shopt -s nullglob
substring=.bed.nodup.sortedbed.roadmap.sort.fgwas.gz
for file in *"$substring"*; do
    echo mv -- "$file" "${file/"$substring"}"
done

注意。 我将echo放在mv前面,这样就不会重命名了。 命令将仅显示在您的终端上。 如果对看到的内容满意,请删除echo

正则表达式实际上并没有比固定模式更通用,但是如果要使其正常工作,则需要在每个点之间允许多个小写字符。 现在,您正在寻找的正是一个,但是您可以在每个[[:lower:]]之后用\\+修复它,例如

printf '%s' "$stringZ" | sed -e 's/\([[:lower:]]\+\.[[:lower:]]\+\.[[:lower:]]\+\.[[:lower:]]\+\.[[:lower:]]\+\.[[:lower:]]\+\.[[:lower:]]\+\.\)//g'

与哪个

stringZ="META_ALL_whrAdjBMI_GLOBAL_August2016.bed.nodup.sortedbed.roadmap.sort.fgwas.gz.r0-ADRL.GLND.FET-EnhA.out.params"

给我输出

META_ALL_whrAdjBMI_GLOBAL_August2016.r0-ADRL.GLND.FET-EnhA.out.params

尝试这个:

#!/bin/bash
for line in $(ls -1 META*);
do
f2=$(echo $line | sed 's/.bed.nodup.sortedbed.roadmap.sort.fgwas.gz//')
mv $line $f2
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM