大家好我需要一个单行命令,场景如下所示。
名为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
可以通过修改上述脚本或提供新命令帮助我完成测试。
我想通过命令而不是使用脚本来实现这一目标。
答案 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
但强烈建议不要这样做,因为单词分裂和通配问题。