拆分带有乱码的字符串

时间:2014-02-24 06:25:45

标签: regex linux string bash

我下载了一堆带有乱码的zip文件。文件名如下:

598»°   2Äêºó.zip

599»°   ²Ýñ¾ÅÈË.zip

我尝试编写一个脚本来重命名Linux系统中的文件名,以便上面的名称变为 598.zip 599.zip

我使用lsgrep命令将所有zip文件读入一个长字符串,例如'total'。然后我使用for loop

   for $name in $total; do

       mv $name $newname;

   done

不幸的是,脚本在这里不起作用。实际上,for循环将按空格分割字符串$ total。上面显示的名称有空格字符。这些额外的空格字符使$ name与zip文件的实际名称不匹配。我不知道如何处理它。任何帮助都会很感激!

3 个答案:

答案 0 :(得分:4)

find -maxdepth 1 -iname '*.zip' | while read ie
do
  oe=$(awk NF=1 FPAT=[0-9]+ <<< "$ie").zip
  mv "$ie" $oe
done

答案 1 :(得分:0)

我得到了答案。 只需在脚本执行操作之前添加以下代码:

   IFS='
  '

这将使用换行作为内部字段分隔符。现在这个空间只是“普通”的角色。

答案 2 :(得分:0)

仅在awk 4及更高版本中支持FPAT。您可以直接使用shell。

find -maxdepth 1 -iname '*.zip' | while read file
do
  echo mv "$file" "${file/[^0-9]*/}"
done

如果上面的脚本没问题,请删除echo,然后重新运行。