0

我的问题是,

在 unix/linux 中从字符串中第 n 次出现分隔符后替换第 2 次或所有出现的特殊字符

或者

替换 unix 数据字段中的“文本限定符”字符。

我在下面的字符串中 '"'(双引号) 应该用空格替换。

细绳:

"123"~"23"~"abc"~24.50~"descr :- nut size 12" & bolt size 12"1/2, Quantity=20"~"2013-03-13"

从上面的字符串,我想要下面的输出:

"123"~"23"~"abc"~24.50~"descr :- nut size 12  & bolt size 12 1/2, Quantity=20"~"2013-03-13"

我已将 " 双引号字符替换为空格字符。

"descr :- nut size 12" & bolt size 12"1/2, Quantity=20"

&

"descr :- nut size 12  & bolt size 12 1/2, Quantity=20"

我想从文件中识别这样的行,并且想从 Unix/Linux 中的数据中替换这样的文本限定符字符。

请您提供您的意见,并提前感谢您。

4

2 回答 2

1

我会使用 plainread来获取字段,然后使用sed或 shell 变量替换机制修改希望的字段:

echo '"123"~"23"~"abc"~24.50~"descr :- nut size 12" & bolt size 12"1/2, Quantity=20"~"2013-03-13"' | {
  IFS='~' read a b c d e f
  printf "%s~%s~%s~%s~%s~%s" "$a" "$b" "$c" "$d" "$(sed 's/"/ /g' <<<$e)" "$f"
  # or:
  printf "%s~%s~%s~%s~%s~%s" "$a" "$b" "$c" "$d" "${e//\"/ }" "$f"
}

IFS(“内部字段分隔符”)是一个内部变量,告诉外壳如何分隔字段,例如在使用read. 在我们的例子中,使用 this 告诉 shell~用作分隔符。将分配直接添加到read命令会使该分配仅在命令的持续时间内进行read

于 2013-10-24T09:45:36.157 回答
0

我将假设您在 bash shell 中工作。

awk(awk) 可以帮助您在正确的位置拆分输入字符串,使用它的“-F”选项:

echo xyzabcdef | awk -Fb '{print $1}'

为您提供“xyza”,即分隔符之前的第一个字符串。

然后,tr(1) 实用程序可以帮助您替换字符:

tr '"' ' '

将用 ' ' 替换 '"'。我希望这有助于让您朝着正确的方向前进。

于 2013-10-24T08:30:48.373 回答