1

我正在尝试删除 bash 文件中除字符 az 和 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 似乎我必须输入我想要删除的所有不同的非字符。

这有更好的方法吗?

4

2 回答 2

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 ' '
于 2013-03-02T23:43:43.640 回答
0

您可以${var/Pattern/Replacement}按照 bash参数替换的建议使用。

在您的情况下,要从 $word 中删除除 az、AZ 和 0-9 之外的所有字符:

echo "$i ${word//[^a-zA-Z0-9]/}"
于 2021-07-27T10:28:21.657 回答