我想从文件中删除所有非英文字母数字。
tr -sc '[:alnum:][:punct:]' ' ' <file
Run Code Online (Sandbox Code Playgroud)
gawk
并sed
有-i
标志,但我在tr
手册页中找不到任何类似的内容。
我该如何就地执行此操作,即将输出存储在输入文件本身中?
没有。很少有命令具有此功能,GNU awk ( gawk
) 最近才添加了它,即使对于那些具有-i
或等效项的命令,它所做的也只是在后台创建一个临时文件。
所以,这样做的方法是:
tr -sc '[:alnum:][:punct:]' ' ' <file >newfile && mv newfile file
Run Code Online (Sandbox Code Playgroud)
如果您经常需要,您可以创建一个小功能:
tri(){
tmpFile=$(mktemp)
echo "$@"
case $# in
## You've given tr options
4)
trOpts="$1"
set1="$2"
set2="$3"
inputFile="$4"
;;
## No options, only set1 and set2 and the input file
3)
set1="$1"
set2="$2"
inputFile="$3"
;;
## Something wrong
*)
echo "Whaaaa?"
exit 1
;;
esac
tr "$trOpts" "$set1" "$set2" < "$inputFile" > "$tmpFile" &&
mv "$tmpFile" "$inputFile"
}
Run Code Online (Sandbox Code Playgroud)
然后您将其运行为:
tri -sc '[:alnum:][:punct:]' ' ' file
Run Code Online (Sandbox Code Playgroud)
请注意,与 real 不同的是tr
,它期望文件名作为参数而不是重定向输入 ( <file
),并且选项如上所示一起指定(而不是像-s -c
)。
归档时间: |
|
查看次数: |
3237 次 |
最近记录: |