抓取文件中包含的路径列表,并将它们作为参数传递给Perl

时间:2017-03-30 16:08:22

标签: bash unix

大家好我需要一个单行命令,场景如下所示。

名为path.txt的文件有一个路径“C:/Windows/system32/main.txt” 那个main.txt有一些unicode字符。

我需要从main.txt中删除unicode字符并在命令下面使用它并且有效。

perl -i.bak -pe 's/[^[:ascii:]]//g' main.txt 

所以上面的命令从文件中删除了所有unicode(非ascii)字符。

但是我需要一个命令,其中path.txt中的数据不断更改它指向不同文件的不同间隔。

我尝试了以下命令以实现它但失败了。

cat path.txt | perl -i.bak -pe 's/[^[:ascii:]]//g' &1  

可以通过修改上述脚本或提供新命令帮助我完成测试。

我想通过命令而不是使用脚本来实现这一目标。

1 个答案:

答案 0 :(得分:1)

我猜__bool__包含您要修改的文件列表。您可以像这样使用path.txt循环:

read

如果您使用Bash,则可以从命令行运行上述循环,而无需将代码存储在脚本中。

您也可以使用Bash数组获得相同的结果(需要Bash 4及以上版本):

#!/bin/bash
while read -r file; do
  perl -i.bak -pe 's/[^[:ascii:]]//g' "$file"
done < path.txt

您可以使用

在一行中执行此操作
readarray -t files < paths.txt  # store all the paths from paths.txt in files array
perl -i.bak -pe 's/[^[:ascii:]]//g' "${files[@]}" # pass the array content to perl

但强烈建议不要这样做,因为单词分裂和通配问题。