免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2951 | 回复: 8

[文本处理] 求助关于sed命令中 单引号和双引号嵌套的问题 [复制链接]

论坛徽章:
0
发表于 2019-03-05 18:21 |显示全部楼层
各位好,我遇到了问题是想获取某一行至结尾的所有内容,正常的命令应该是这样的。
sed -n '2,$p' 123.log

但是我的起始得是个变量,并不是一个固定的数,因此在我的环境 是这样的

sed -n '$first_row_num,$p' 123.log

这样一来我的变量就不起作用了,我试了好多种单引号和双引号组合都无法使命令执行成功,还请各位朋友 帮忙。实现在sed命令中实现使用变量。


论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
发表于 2019-03-05 20:59 |显示全部楼层
  1. sed -n "$first_row_num,\$p" 123.log
复制代码

论坛徽章:
0
发表于 2019-03-05 22:49 |显示全部楼层

就是这种效果,感谢您的帮助。

论坛徽章:
0
发表于 2019-03-06 08:48 |显示全部楼层
本帖最后由 东北胖子 于 2019-03-06 09:11 编辑

发重了,删除

论坛徽章:
0
发表于 2019-03-06 08:49 |显示全部楼层
本帖最后由 东北胖子 于 2019-03-06 09:12 编辑

发重了删除

论坛徽章:
0
发表于 2019-03-06 08:49 |显示全部楼层
本帖最后由 东北胖子 于 2019-03-06 09:12 编辑

发重了删除

论坛徽章:
0
发表于 2019-03-06 08:49 |显示全部楼层
本帖最后由 东北胖子 于 2019-03-06 09:12 编辑

发重了删除

论坛徽章:
0
发表于 2019-03-06 08:49 |显示全部楼层
回复 2# klainogn

#!/bin/bash
#program:
#history
#2019/3/5

function check_nonde_p_state
{
    while test $# -gt 0
    do
        if [ "$1" == "Normal" ];then
            shift
                        nonde_p_state=normal
        else
                        nonde_p_state=abnormal
            break
        fi
    done
}


#计算需要获取的起始行号
first_row_num=$((`cat 123.log | grep -n "Coordinator State" | cut -d: -f1` + 4))

#设置需要获取的行数
row_num=4

#获取数据
get_node_p_state=`sed -n "$first_row_num,\$p" 123.log | awk '{print $6}'`
#echo $get_node_p_state
check_nonde_p_state  $get_node_p_state

#输出Coordinator 状态
echo $nonde_p_state

我现在的代码是这样的,但是有报错:
[root@test01 opt]# sh node_stat.sh
sed: -e expression #1, char 3: unexpected `,'
[root@test01 opt]# sh -x node_stat.sh
++ cut -d: -f1
++ grep -n 'Coordinator State'
++ cat 123.log
+ first_row_num=18
+ row_num=4
++ awk '{print $6}'
++ sed -n 18, 123.log
sed: -e expression #1, char 3: unexpected `,'
+ get_node_p_state=
+ check_nonde_p_state
+ test 0 -gt 0
+ echo

论坛徽章:
0
发表于 2019-03-06 09:20 |显示全部楼层
我测试通过了,加两个反斜杠就好了。
get_node_p_state=`sed -n $first_row_num,\\$p 123.log | awk '{print $6}'`
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP