假设我有一个包含大量网站名称的目录。
即
dev.domain.com
dev.domain2.com
dev.domain3.com
如何使用管道和/或重定向bash将这些名称重命名为linux cli上的<domain>.com
?
我得到了一点,而不是卡住了。
find . -maxdepth 1 | grep -v "all" | cut --delimiter="." -f3 | awk '{ print $0 }'
给了我域名部分,但我无法理解。不确定awk是答案。任何建议都表示赞赏。
答案 0 :(得分:2)
要从名称中删除前导'dev.'
,它应该是这样的:
for i in $(find * -maxdepth 1 -type d); do mv $i $(echo $i | sed 's/dev.\(.*\)/\1/'); done
答案 1 :(得分:1)
尝试rename命令。它可以采用这样的正则表达式:
rename 's/\.domain.*/.com/' *.com
答案 2 :(得分:1)
for i in *; do mv $i $( echo $i | sed 's/\([^\.]*\).\([^\.]*\).\([^\.]*\)/\2.\1/' ); done
说明:
for i in *; do ....; done
为每个文件
执行此操作echo $i | sed 's/\([^\.]*\).\([^\.]*\).\([^\.]*\)/\2.\1/'
取三组“除了每个角色”。并改变他们的秩序 \ 2. \ 1表示:打印第二组,一个点,第一组
$(...)接受sed的输出并在 mv $ i 之后“粘贴”它并称为“命令替换”http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution < / p>答案 3 :(得分:0)
在您要使用的目录下,尝试:
ls -dF *|grep "/$"|awk 'BEGIN{FS=OFS="."} {print "mv "$0" "$2,$3}'
将打印mv命令。如果要进行重命名,请添加"|sh"
和结尾:
ls -dF *|grep "/$"|awk 'BEGIN{FS=OFS="."} {print "mv "$0" "$2,$3}'|sh