gpt4 book ai didi

string - 如何让 bash "eat"字符串中所有行共有的缩进字符?

转载 作者:行者123 更新时间:2023-11-29 09:43:04 25 4
gpt4 key购买 nike

我在 shell 变量中有一些多行字符串。字符串的所有行都有至少几个空白字符的未知缩进级别(在我的示例中为 8 个空格,但可以是任意的)。例如,让我们看一下这个示例字符串:

        I am at the root indentation level (8 spaces).
I am at the root indentation level, too.
I am one level deeper
Am too
I am at the root again
I am even two levels deeper
three
two
one
common
common

我想要的是一个 Bash 函数或命令来去除常见的缩进级别(此处为 8 个空格),所以我得到了这个:

I am at the root indentation level (8 spaces).
I am at the root indentation level, too.
I am one level deeper
Am too
I am at the root again
I am even two levels deeper
three
two
one
common
common

可以假设这个字符串的第一行总是在这个共同的缩进级别。最简单的方法是什么?理想情况下,当逐行读取字符串时,它应该可以工作。

最佳答案

你可以使用awk:

awk 'NR==1 && match($0, /^ +/){n=RLENGTH} {sub("^ {"n"}", "")} 1' file
I am at the root indentation level (8 spaces).
I am at the root indentation level, too.
I am one level deeper
Am too
I am at the root again
I am even two levels deeper
three
two
one
common
common

对于第一条记录 (NR==1),我们在开始时匹配空格 (match($0,/^ +/)) 并存储匹配的长度(RLENGTH) 到变量 n

然后在打印时我们去除 gsub("^ {"n"}", "") 中的 n 空格。

关于string - 如何让 bash "eat"字符串中所有行共有的缩进字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com