【问题标题】:skip lines while reading text files from ksh从 ksh 读取文本文件时跳过行
【发布时间】:2013-12-25 16:27:45
【问题描述】:

我有一个逐行包含一些名称的文本文件。 我正在通过 KornShell (ksh) 读取此文件并获取这些名称并循环执行一些操作。 为了便于阅读,我想在文本文件中添加一些注释(即,以 # 开头的行是 cmets,无需阅读)。 所以,我想要的是阅读不以 # 符号开头的行。

在 ksh 中,我是这样读的:

while read base
do
---
---
done<file

我尝试使用 grep,但无法正常工作。 我想要正确的语法在 ksh 中实现它。

【问题讨论】:

    标签: shell unix scripting ksh


    【解决方案1】:

    例如,您可以这样做 (read.sh):

    #!/bin/ksh
    
    while read line
    do
        [[ $line = \#* ]] && continue
    
        echo $line
    done < read.sh
    

    【讨论】:

    • 那部分会做什么..?我想对没有开始的行执行操作 # .. 你能解释一下吗
    • continue 就像在任何其他语言中的 continue 一样 - 它会“跳到循环的末尾”并实际上读取下一行。所以在我做 echo $line 的地方你可以执行你的操作,因为那时你知道 $line 不以 # 开头
    • 双括号只是一个带有模式匹配的测试运算符(它匹配以哈希开头的所有内容,哈希必须被转义,否则它将被解释为脚本中的注释):mkssoftware.com/docs/man1/test.1.asp
    • 或等价于grep -v '^#' read.sh | while read line; do echo "$line"; done
    【解决方案2】:

    这个怎么样(编辑以包含完整的代码 sn-p):

    while read base
    do
        # skip comments
        [ -z "`echo $base | grep '^#'`" ] || continue
        # handle remaining lines here
    done<file
    

    other answer 包含更简洁和ksh-ish 的解决方案。

    【讨论】:

    • 在哪里包含这个条件。你能详细说明一下吗..?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多