我这有两个shell脚本的函数,如果文件中出现空行,就会异常。
while read line
do
echo "$path" | grep -q "$line"
if [ $? -eq 0 ]; then
matched=1
break
fi
done < $PATHRULECFG
这段代码中,如果文件PATHRULECFG中出现空行和以"#"开头的注释行,如何忽略那一行。
while read path folder
do
echo "$fullpath" | grep -q "$path"
if [ $? -eq 0 ]; then
matched=1
break
fi
done < $CPYPATHCFG
这里一样的,如果文件CPYPATHCFG中有空行和注释行,如何忽略。
å¯ä»¥éè¿sedå½ä»¤ï¼å°ç©ºè¡å注éè¡å é¤æã
1ã以ä¸é¢çææ¡£å 容为ä¾ï¼#å·å¼å¤´çæ¯æ³¨éï¼ç¶åæå¾å¤ç©ºè¡ï¼ææ¡£å为1.ttã
2ãæ§è¡å¦ä¸å½ä»¤
sed '/^#.*\|^$/d' 1.tt
说æ:^#.*说æ以#å符å¼å¤´çè¡ï¼^$表示æ空è¡ï¼ä¸é´ç\|æ¯è½¬ä¹ï¼è¡¨ç¤ºæãd表示å é¤ã
改为:
done < `egrep -v "(^$)|(^#)" $PATHRULECFG`
同理,
done < $CPYPATHCFG改为:
done < `egrep -v "(^$)|(^#)" $CPYPATHCFG`追问请教一个问题:
为什么会打印出
mat: 1
matched: 0
while循环不能改变变量matched的值?
出游归来...
管道符会开启新的shell,while循环是在新shell中执行,变量会被拷贝一份进入新shell,新shell执行结束其中的变量也会消亡,也就是说,循环体中的变量赋值是不能被带出来的。
这就是下面两种方式的主要区别之一:
1. cat file | while read line
2. while read line
do
done <file
那如果我想带出来,又该如何写呢?
比如:
定义变量a=0
进入读文件的循环,每次读到一行line,因为要跳过空行,所以用grep了
do
如果line满足了某条件,a=1,line也需要记下来,break
while
这里,我希望知道a是否为1,如果为1,对应的line是什么?
我该如何做呢?
想带出来,就用第二种结构:
或者用小括号将while后的echo语句跟while循环包在一起,这样就绑定在一个子shell中了。
grep -Ev "^$|^#.*$ ./cpypath.cfg | (while read path folder
do
xxxxxx
done
echo "mat:" $matched)
提示
该怎么解决呢,加括号那个办法确实可以,我试过了。
不好意思,双引号的位置错了。。。看出来了吧。。。
追问可是
done < `grep -Ev "^$|^#.*$" $PATHRULECFG`
也不行啊
实践不行就说明的确不行...
< 用于从文件读入
从多行字符串读入用 <<< 吧,Here String
我需要搞一个比较文件夹的shell脚本
http://zhidao.baidu.com/question/1795847883031359467.html
你看下这个,帮帮忙,谢谢!!!
这个需要一些时间,现在上班时间干活儿要紧。
这里高手也很多,会有人来解决的。这个问题我后面有时间也会看看,若没得到解决我再上。
好,谢谢哈
本回答被网友采纳把这个加在什么地方啊
追答cat CPYPATHCFG | grep -v "^#" | grep -v "^$"
追问我要读取文件的每一行,然后使用那一行的数据(假设是1/2/3/)和传入的字符串(假设是1/2/3/4/5.txt)来匹配,如例子中就能够匹配成功。我希望可以存在一些空行和一些注释行。
该如何修改上面图片中的那个函数呢?
不懂了,你不是说要去掉注释和空行吗?怎么现在又要添加空行和注释呢?
追问请教一个问题:
为什么会打印出
mat: 1
matched: 0
while循环不能改变变量matched的值?
我自己做了一个小脚本测试了一下,你可以看一下,比较一下区别
是我写错了,把那句话中的 ] 换成 ]]
追问那如果那一行#之后还有内容呢,加个#本来想注释掉的。
你这个好像不能解决吧
把这个加在哪里呢?
我新手,help!!!
直接执行就可以了。做个重定向把内容输出到一个新文件file里。
grep -Ev "^$|^#" PATHRULECFG > file追问我只是想,读文件的时候遇到了空行和以”#“开头的注释行,就直接跳过,重新读下面一条,不需要搞新文件啊。
追答那你就直接执行好啦。grep也是读取文件。直接把空行和注释行 过滤掉不就完了。 何必还要自己去判断。while循环写这么麻烦?
追问我要读取文件的每一行,然后使用那一行的数据(假设是1/2/3/)和传入的字符串(假设是1/2/3/4/5.txt)来匹配,如例子中就能够匹配成功。我希望可以存在一些空行和一些注释行。
如果像你说的这样,该如何修改这个函数呢?
shell脚本读文件如何忽略空行和注释行
可以通过sed命令,将空行和注释行删除掉。1、以下面的文档内容为例,#号开头的是注释,然后有很多空行,文档名为1.tt。2、执行如下命令 sed '\/^#.*\\|^$\/d' 1.tt说明:^#.*说明以#字符开头的行,^$表示手空行,中间的\\|是转义,表示或。d表示删除。
如何用shell脚本删除文件中的空行
可以通过sed命令,将空行和注释行删除掉。1、以下面的文档内容为例,#号开头的是注释,然后有很多空行,文档名为1.tt。2、执行如下命令 sed '\/^#.*\\|^$\/d' 1.tt说明:^#.*说明以#字符开头的行,^$表示手空行,中间的\\|是转义,表示或。d表示删除。
如何去掉linux配置文件的注释行和空行
1、使用grep -v "^#" 来去掉注释行,其中:-v 就是取相反的 ^# 表示以#开头的行 eg. grep -v "^#" \/etc\/vsftpd\/vsftpd.conf (也可以使用“>”来重写配置文件)2、有时也会连同空行一起去掉,使用管道符来完成(^$表示空行 )eg. grep -v "^#" httpd.conf | grep -v "...
shell脚本里怎么去掉其中两行注释并保存退出
试试这样: sed '\/^$\/d' input | awk '{print $0"\\n"}' >output处理input文件。 首先用sed去掉所有空行,然后通过awk在逐行打印时再加上一个空行。 结果保存到output文件中。
shell脚本读取配置文件参数
1、 读取配置文件时,将注释符#标记的行和空行全部过滤 sed -E '\/^#.*|^ *$\/d' $env_file 。 2、 匹配指定参数相符的行并截取对应的值 awk -F "${param}=" "\/${param}=\/{print \\$2}" 。 3、 获得的结果可能有多个,取最后一个值 tail -n1 。 4、这3步都用 | 管道符连接,其作用是将当...
shell如何读取文件的最后一非空行
1、sed -n '$p' $file打印尾行 2、sed -i '$d' $file删除尾行 3、例如a.sh !\/bin\/sh file=$1 if [[ -z $1 ]];then echo Usage $0 file;exit 0;fi while [[ -z $tt ]];do tt=$(sed -n '$p' $file)if [[ -z $tt ]];then sed -i '$d' $file fi done sed...
...删除文本文件中多余回车或提取文本中前两行数据的shell脚本,请...
这样删除空行,grep -E -v '^[\\t\\n ]*$' file > outfile 用脚本批量改,在该目录下放入这脚本 ! \/bin\/bash for i in *.txt # 假设副档为 .txt do grep -E -v '^[\\t\\n ]*$' "$i" > "$i".bak ret=$?if [ $ret -eq 0 ]then mv -f "$i" "$i".temp mv -f "...
SHELL脚本中怎么删除连续多个空行却保留一个。
试试这样:sed '\/^$\/d' input | awk '{print $0"\\n"}' >output处理input文件。首先用sed去掉所有空行,然后通过awk在逐行打印时再加上一个空行。结果保存到output文件中。
shell一行一行读取?
4、读取配置文件时,将注释符#标记的行和空行全部过滤sed-E\/^#.*|^*$\/d$env_file。匹配指定参数相符的行并截取对应的值awk-F${param}=\/${param}=\/{print\\$2}。shell读取并执行文件1、\\x0d\\x0a直接运行可执行的shell脚本之前,首先应使用下列chmod命令,把shell脚本文件设置为可执行的文件。
用shell找出文件首行为空,有哪些方案?
结合find和head命令,遍历文件目录,查看并筛选出首行为空的文件。Perl语言为文本处理提供强大工具,通过一行代码实现检查文件首行是否为空。编写Bash脚本提供更多灵活性,适用于复杂逻辑判断或错误处理,通过遍历文件,检查第一行内容。以上方案展现了Shell编程的多样性和高效性,选择最适合自己需求的工具,简化...