在unix / linux中,从字符串第n次出现分隔符后,替换第二次出现的特殊字符

时间:2013-10-24 07:41:44

标签: string unix

我的问题是,

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

从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中的数据中替换这样的文本限定符。

要求您提供输入,&提前感谢你。

2 个答案:

答案 0 :(得分:1)

我会使用普通read获取字段,然后使用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(“内部字段分隔符”)是一个内部变量,告诉shell如何分隔字段,例如使用read时。在我们的例子中,使用它告诉shell使用~作为分隔符。将赋值直接添加到read命令仅在read命令的持续时间内进行分配。

答案 1 :(得分:0)

我假设你在bash shell中工作。

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

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

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

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

tr '"' ' '

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