我的问题是,
在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中的数据中替换这样的文本限定符。
要求您提供输入,&提前感谢你。
答案 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 '"' ' '
将'''替换为''。我希望这有助于让你朝着正确的方向前进。