1

我有以下数据

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

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

X|X.X|abcdefesd|XXXX|XXXXXXXXX

X = 数字

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

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

我目前是 unix 新手

4

3 回答 3

1

这应该有效:

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

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

echo "2.|3.5|abcdefesd|(3455)|2412412414" | sed -e 's/\([0-9]\+\)\.\([^0-9]\)/\1\2/g' -e 's/(\([0-9]\+\))/\1/g'
2|3.5|abcdefesd|3455|2412412414
于 2013-10-08T07:51:37.317 回答
1

使用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
于 2013-10-08T08:02:48.837 回答
0

为什么不直接删除括号?

awk '{gsub(/[()]/,x)}1' <<< "2.|3.5|abcdefesd|(3455)|2412412414"
2.|3.5|abcdefesd|3455|2412412414
于 2013-10-08T08:18:39.633 回答