将模式的奇数和偶数替换为另一个相同的模式

Sen*_*Sen 2 unix linux awk sed

有一个场景,用除以 2 时的商数替换偶数和奇数出现的反斜杠。

For example
Input: (15 backslashes)
\\\\\\\\\\\\\\\
output: (7 backslashes)
\\\\\\\

Input: (14 backslashes)
\\\\\\\\\\\\\\
output: (7 backslashes)
\\\\\\\
Run Code Online (Sandbox Code Playgroud)

我尝试使用 sed 命令,该命令适用于 4 个反斜杠到 2 个。 sed 's/\\\\/\\/g'

如果有帮助,不胜感激。

anu*_*ava 5

你可以试试这个awk

cat file

\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\

# using awk
awk '{print substr($0, 1, int(length($0)/2))}' file

\\\\\\\
\\\\\\\
Run Code Online (Sandbox Code Playgroud)


Sun*_*eep 5

另一种sed解决方案:

$ cat ip.txt
\\\\\\\\
\\\\\\\
\\\\\\
\\\\\
\\\\
\\\
\\
\
$ sed -E 's/(\\+)\1\\?/\1/g' ip.txt
\\\\
\\\
\\\
\\
\\
\
\
\
Run Code Online (Sandbox Code Playgroud)

(\\+)\1\\? 将平均划分反斜杠,最后的可选匹配将消耗最后一个反斜杠的奇数情况。

如果应删除单个反斜杠而不是保留,请使用

sed -E 's/((\\+)\2)?\\?/\2/g'
Run Code Online (Sandbox Code Playgroud)