删除所有字符期望bash中的a-z 0-9

时间:2013-03-02 23:36:02

标签: bash

我试图删除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,似乎我必须输入我想删除的所有不同的非字符。

这有更好的方法吗?

2 个答案:

答案 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]/}"