这个活动的主要目标是在每一行的开头得到所有没有注解的行,然后注解它们,我两者都需要,首先了解它们,然后再修改它们。
我有下面的testfile
:
line1
#comment1
#comment2
wrongcomment#
line2
#comment3
## double comment with space
#
#
# empty space and comment
[ lineinBrackets ]
( lineinBrackets2 )
LinewithValue = 2
在我当前的任务中,我首先尝试获取没有注解的行,执行一个简单的grep:
grep -vi '^#' testfile
得到了预期的输出:
line1
wrongcomment#
line2
# empty space and comment
[ lineinBrackets ]
( lineinBrackets2 )
LinewithValue = 2
现在我尝试应用sed在行首添加一个#
,但是不起作用[例如,一行shell执行,这应该在脚本上]:
注意:我不能在每次运行脚本时都在每一行中添加一个#,这就是为什么我尝试只在没有以#开头的地方添加,并匹配从grep中获得的模式。
for i in $(grep -vi '^#' testfile); do sed -e '/<pattern>/ s/^#*/#/g' -i testfile;done
却什么也不做。
想要找到错误,尝试这个,如果我尝试同样的echo
,它应用换行符在每个空间。
for i in $(grep -vi '^#' testfile); do echo $i;done
给出:
line1
wrongcomment#
line2
#
empty
space
[
lineinBrackets
]
(
lineinBrackets2
)
LinewithValue
=
2
这不是我所期望的。
我已经单独测试了每个部分,它工作,但当我试图集成它们时,它不工作。
for i in $(grep -vi '^#' testfile); do sed -e '/$i/ s/^#*/#/g' -i testfile;done
**根据要求,我们需要的最终输出为:**哪些行需要编辑:
line1
wrongcomment#
line2
# empty space and comment
[ lineinBrackets ]
( lineinBrackets2 )
LinewithValue = 2
- 文件中的版本:*
#line1
#comment1
#comment2
#wrongcomment#
#line2
#comment3
## double comment with space
#
#
# # empty space and comment
#[ lineinBrackets ]
#( lineinBrackets2 )
#LinewithValue = 2
我需要能够处理两个结果。
5条答案
按热度按时间hmmo2u0o1#
使用与以
#
开头的行匹配的模式。然后用!
求条件的反,并在开头替换#
。new9mtju2#
要编辑文件,请使用文件编辑器。
ed
打开指定的文件,并将从标准输入读取的命令应用于该文件。s
命令用#
替换每行开头的空字符串。v/^#/
仅将以下s
命令应用于 * 不 * 以#
开始的行。w
命令将所有挂起的更改写入文件。从标准输入读取所有内容后,编辑器退出。
您可以使用以下文档编写相同的命令:
icnyk63a3#
我不知道你为什么需要这个,但在你的问题,你说你这样做-这里是如何显示行,将由上述更改:
h7appiyu4#
使用
awk
,将#
添加到不以#
开头的行的开头:或
osh3o9ms5#
在
awk
中一种非常不得体的方式: