0

我在变量中有这样的文件(比如说${var_file}):

ABC+123+456+789+12'\r
DEF+987+98790+12+00'\r
GHI+12+12?+39+123498345+21+1'\r
ABC+485+2?'\r
ABC+34?+8kj+3949+1+sdfkj+sdfkj'\r
GHC+++sdf'\r
ABC+123++235+5435'\r

我还有一个变量$var1,其中包含 INT 格式的数字并$var2包含行首。

我需要一个 sed 命令(或 awk/cut?)或将成为 bash 脚本一部分的函数,它将替换文件中全局(所有可能的行)上行开始(例如或)上分隔符$var1之间的位置。也有可能,因为是转义字符,所以在这种情况下不能用作分隔符,它是普通文本。行应始终足够长,以包含选定行开始的定义计数。+$var2ABCABC+123?+?++$var1$var2

以( )开头的行中位置 3 ( $var1 = "3", 在 3rd 和 4th 之间)的输出示例+ABC+123$var2 = "ABC+123"

因此输出应该是:

ABC+123+456++12'\r
DEF+987+98790+12+00'\r
GHI+12+12?+39+123498345+21+1'\r
ABC+485+2?'\r
ABC+34?+8kj+3949+1+sdfkj+sdfkj'\r
GHC+++sdf'\r
ABC+123+++5435'\r

更改在第 1 行和第 7 行。

$var1 = "3"如果仅删除以 ( )开头的行中的第三个位置 ( ABC) $var2 = "ABC"

ABC+123+456++12'\r
DEF+987+98790+12+00'\r
GHI+12+12?+39+123498345+21+1'\r
ABC+485+2?'\r
ABC+34?+8kj+3949++sdfkj+sdfkj'\r
GHC+++sdf'\r
ABC+123+++5435'\r

更改位于第 1、5 和 7 行。

有人可以帮我弄这个吗?我尝试了各种 sed 命令,但我找不到解决方案..

谢谢!

4

2 回答 2

2

你的问题不是很清楚,但我认为你想要做的是:

awk -v start="$var2" -v col="$var1" '
    BEGIN { FS=OFS="+" }
    { gsub(/[?][+]/,RS) }
    index($0,start)==1 { $(col+1)="" }
    { gsub(RS,"?+") } 1
' file
于 2017-10-25T20:49:07.977 回答
0

你可以用 sed 试试这个

sed 's/?+/\n/g;/'"$var2"'/s/\(+[^+]*\)/+/'"$var1"';s/\n/?+/g' file
于 2017-10-25T21:10:38.100 回答