我试图删除bash文件中除了字符a-z和0-9之外的所有字符,这是我到目前为止所拥有的:
#!/bin/bash
i=-1
cat rtrans.txt | while read line
do
i=$((i+1))
for word in $line
do
echo "$i $word"|tr A-Z a-z|sed 's/[\._-]//g'
done
done > input1.test
然而,对于sed,似乎我必须输入我想删除的所有不同的非字符。
这有更好的方法吗?
答案 0 :(得分:3)
您可以使用字符类
echo "$i $word" | tr A-Z a-z | sed -e 's/[^a-z0-9]//g'
这会删除^
中的所有字符 [a-z0-9]
。
如果要将文件拆分为单词并连续编号,也可以尝试
tr -s ' \t' '\n' <rtrans.txt | tr A-Z a-z | sed -e 's/[^a-z]//g' | nl -n ln -w1 -s ' '
答案 1 :(得分:0)
您可以按照 bash parameter substitution 的建议使用 ${var/Pattern/Replacement}
。
在您的情况下,要从 $word 中删除除 a-z、A-Z 和 0-9 之外的所有字符:
echo "$i ${word//[^a-zA-Z0-9]/}"