sed 内的正则表达式在 bash 中循环应用于文件
Regex inside sed inside for cycle in bash applied on file
我在变量中有这样的文件(假设 ${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
我还有一个包含 INT 格式数字的变量 $var1
和包含行首的 $var2
。
我需要一个 sed 命令(或 awk/cut?)或将成为 bash 脚本的一部分的函数,它将替换 +
分隔符之间的 $var1
位置$var2
行开始(例如 ABC
或 ABC+123
),全局在文件上(对于所有可能的行)。
还有可能是 ?+
,因为 ?
是转义字符,所以在这种情况下 +
不能用作分隔符,它是普通文本。对于在 $var2
.
中开始的选定行,行应始终足够长以包含 $var1
中定义的 +
计数
以 ABC+123
($var2 = "ABC+123"
)
开头的行中位置 3($var1 = "3"
,第 3 和第 4 +
之间)的输出示例
因此输出应该是:
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 行。
如果只删除以 ABC
($var2 = "ABC"
) 开头的行的第三个位置 ($var1 = "3"
):
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 命令,但找不到解决方案。
谢谢!
你的问题不是很清楚,但我想你想做的是:
awk -v start="$var2" -v col="$var1" '
BEGIN { FS=OFS="+" }
{ gsub(/[?][+]/,RS) }
index([=10=],start)==1 { $(col+1)="" }
{ gsub(RS,"?+") } 1
' file
你可以用 sed 试试这个
sed 's/?+/\n/g;/'"$var2"'/s/\(+[^+]*\)/+/'"$var1"';s/\n/?+/g' file
我在变量中有这样的文件(假设 ${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
我还有一个包含 INT 格式数字的变量 $var1
和包含行首的 $var2
。
我需要一个 sed 命令(或 awk/cut?)或将成为 bash 脚本的一部分的函数,它将替换 +
分隔符之间的 $var1
位置$var2
行开始(例如 ABC
或 ABC+123
),全局在文件上(对于所有可能的行)。
还有可能是 ?+
,因为 ?
是转义字符,所以在这种情况下 +
不能用作分隔符,它是普通文本。对于在 $var2
.
$var1
中定义的 +
计数
以 ABC+123
($var2 = "ABC+123"
)
$var1 = "3"
,第 3 和第 4 +
之间)的输出示例
因此输出应该是:
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 行。
如果只删除以 ABC
($var2 = "ABC"
) 开头的行的第三个位置 ($var1 = "3"
):
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 命令,但找不到解决方案。
谢谢!
你的问题不是很清楚,但我想你想做的是:
awk -v start="$var2" -v col="$var1" '
BEGIN { FS=OFS="+" }
{ gsub(/[?][+]/,RS) }
index([=10=],start)==1 { $(col+1)="" }
{ gsub(RS,"?+") } 1
' file
你可以用 sed 试试这个
sed 's/?+/\n/g;/'"$var2"'/s/\(+[^+]*\)/+/'"$var1"';s/\n/?+/g' file