作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
我有一个包含 28 列的数据库。第一列是代码,第二列是名称,其余是值。 public void displayData() { con.Open(); MySqlDataAdapter
Redmi 官方今天宣布了 Redmi智能电视 A 系列新品,称即将开放预约。 官方并未公布 Redmi智能电视 A 系列新品的具体信息,但给出的海报显示该系列提供五种尺寸:32 英寸、43
我是一名优秀的程序员,十分优秀!