当前位置: 首页 > 知识库问答 >
问题:

如何使bash“eat”缩进字符与字符串中的所有行共用?

端木元青
2023-03-14

在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

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

共有1个答案

西门振
2023-03-14

您可以使用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),我们在开始时匹配空格(匹配(0美元, /^ /)),并将匹配的长度(RLENGTH)存储到变量n中。

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

 类似资料:
  • 问题内容: 我在textarea中有一个文本,我使用.value属性将其读出。 现在,我想使用正则表达式.replace从我的文本中删除所有换行符(按时产生的字符),但是如何在正则表达式中指示换行符? 如果那不可能,还有另一种方法吗? 问题答案: 这可能是一个常见问题解答。无论如何,换行符(更好的是:换行符)可以是回车符(在较旧的Mac上为CR,),换行符(在Unices 包括Linux上为LF,

  • 我在textarea中有一个文本,我使用.value属性读出它。 现在我想从我的文本中删除所有的换行符(按Enter时产生的字符),现在使用.替换为正则表达式,但如何在正则表达式中指示换行符? 如果不可能的话,是否还有其他方法?

  • 我有一个包含以下列的表: 然后,我手动将更新sql编写为 现在,这个解决方案对我来说并不现实。我查看了以下与Regex相关的链接和它周围的其他链接。 更新和替换字符串的一部分 https://www.codeproject.com/questions/456246/replace-special-characters-in-sql 我如何编写能够处理所有这些特殊字符的更新sql?

  • 问题内容: 如何替换字符串(字符串以上)中的所有字符,应该看起来像? 问题答案: 一种无需正则表达式的简单方法: https://play.golang.org/p/B3c9Ket9fp 您最初可能会想些什么: https://play.golang.org/p/nbNNFJApPp

  • 问题内容: 我有一个缩进的JSON字符串,例如 但是,我没有要序列化或反序列化的实例的类型。 在我的情况下, 最小化* JSON字符串的 最有效方法 是什么?例如 * 我不介意使用可用于生产的库。 问题答案: 应该做。它确保保留包含空格字符的字符串,并丢弃所有其他空格字符。所有的JSON的关键字(,,)必须由逗号或其他标点符号所以只有字符串内需要空格分开予以保留。 第一个选项匹配双引号字符串。表示

  • 问题内容: 我是Java的新手,为了实践起见,我试图创建一个十六进制到十进制的数字转换器,因为我已经成功地制作了一个二进制到十进制的转换器。 我遇到的问题基本上是将一个字符串中的给定字符与另一个字符串进行比较。这就是我定义要比较的当前字符的方式: 这是我尝试比较角色的方法: 当我尝试通过仅输入数字(例如12)来运行代码时,它可以工作,但是当我尝试使用“ b”时,会出现一个奇怪的错误。这是运行程序的