我正在尝试获取bash中markdown文件中所有缩进的行。我需要它们在文件中的位置,以便以后能够在原始位置再次提取或插入它们。
下面是一个markdown文件的例子,我想为它获取所有缩进的行。
# Example bloc code
This is a bloc code
function display_results() {
awk '{print $0; system("sleep .5");}' $1
rm $1
}
This code displays results.
below an other example of bloc code
echo "------------------------------------------"
echo " TEST RESULTS"
echo "------------------------------------------"
Or just one line:
System.out.println("foo");
blablablab
因为我想要块的位置,所以我逐行解析文件,并使用正则表达式查看该行是否缩进。
注意:这里提到regex不是获取块代码的正确工具,因为可能会嵌套块代码。我不必处理这个用例,并且只获得上面示例中所示的正常块代码就足够了。
我的代码是:
# One of the regex I have tested
regex='^[[:blank:]]+' #Not find any line
while read line; do
# Try to find indented lines by using regex
if [[ $line =~ $regex ]]; then
echo "INDENTED: $line"
else
echo "TEXT: $line"
fi
done < $testFile
其中$testFile
是我解析的降价文件。
目前,我写的最好的正则表达式(基于这个答案和这个答案(只匹配一些行,但不是所有行。
例如,使用以下正则表达式,我只得到部分行,但没有得到全部行:
regexblank="[^a-zA-Z#]+[[:blank:]]"
regexspace="[^a-zA-Z#]+[[:space:]]"
blank="[^a-zA-Z#]+[[:blank:]]"
使用上面的正则表达式,结果是:
TEXT: # Example bloc code
TEXT:
TEXT: This is a bloc code
TEXT:
INDENTED: function display_results() {
INDENTED: awk '{print main.sh; system("sleep .5");}'
TEXT: rm
TEXT: }
TEXT:
TEXT: This code displays results.
TEXT:
TEXT: below an other example of bloc code
TEXT:
TEXT: echo "------------------------------------------"
INDENTED: echo " TEST RESULTS"
TEXT: echo "------------------------------------------"
TEXT:
TEXT: Or just one line:
TEXT:
TEXT: System.out.println("foo");
TEXT:
TEXT: blablablab
正如您所看到的,我必须在三个正则表达式中指定行不能以字母或#
开头,否则会检测到标题中的某些行缩进。
使用awk如下给我所有缩进的行
awk '/^(t|s)+/' $mdFile
但awk只在文件上工作,我需要了解每个集团的立场。
如何解析文件并获取所有缩进的行?正如我所解释的,我正在尝试使用regex,但任何获得缩进行及其在文件中各自位置的解决方案都将非常好。
你可以在这里找到我写的代码和所有正则表达式
看看line
每行包含什么:
$ cat infile
line
indented
line
$ while read line; do echo "<$line>"; done < infile
<line>
<indented>
<line>
这是因为read
(强调矿(的这种行为:
从标准输入中读取一行[…],如上文"分词"中所述,拆分为单词,第一个单词分配给第一个名称,[…]
要防止这种情况,请将IFS
设置为空字符串(并添加-r
以避免反斜杠解释(:
$ while IFS= read -r line; do echo "<$line>"; done < infile
<line>
< indented>
<line>