使用 sed 从数字中删除尾随点并删除数字周围的圆括号



>我有以下数据

X.|X.X|abcdefesd|(XXXX)|XXXXXXXXX

我正在使用 sed 将其格式化为

X|X.X|abcdefesd|XXXX|XXXXXXXXX

X = 数字

我正在使用命令sed "s/([0-9]+)/1/g"第一列(这里的数字可以从 1 位到 3 位(

第 4 列sed 's/[^(]*(([^)]*)).*/1/g'(数字将始终为 4 位数字(

我目前是 unix 的新手

这应该有效:

sed -e 's/([0-9]+).([^0-9])/12/g' -e 's/(([0-9]+))/1/g'

-e用于链接多个 sed sommand。第一个捕获数字序列,后跟一个点,然后跟一个非数字,并在没有点的情况下替换它。第二个只是将括号内的任何数字序列替换为没有括号的相同序列。

echo "2.|3.5|abcdefesd|(3455)|2412412414" | sed -e 's/([0-9]+).([^0-9])/12/g' -e 's/(([0-9]+))/1/g'
2|3.5|abcdefesd|3455|2412412414

使用 awk 这可能更简单。 尝试:

awk -F'|' -vOFS='|' '{$1=sprintf("%d",$1);gsub("[^0-9]","",$4)}1' inputfile

例:

$ awk -F'|' -vOFS='|' '{$1=sprintf("%d",$1);gsub("[^0-9]","",$4)}1' <<< "2.|3.5|abcdefesd|(3455)|2412412414"
2|3.5|abcdefesd|3455|2412412414

为什么不直接删除括号?

awk '{gsub(/[()]/,x)}1' <<< "2.|3.5|abcdefesd|(3455)|2412412414"
2.|3.5|abcdefesd|3455|2412412414

最新更新