>我有以下数据
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