) > 72) {print 脚本:只变换很长的行 -电脑资料 }}'filename 还有一个有趣点的方法,就是使用shell中的$#vamname结构,它会返回任意一个替换了vamname的变量的长度(指内容,不是变量名),脚本:只变换很长的行。 01 #!/bin/sh 02 ...">

脚本:只变换很长的行 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

   

    比如,要快速的扫描一个文件,看看哪些行过长:

    1

    awk '{if (length($0) > 72) {print $0}}' filename

    还有一个有趣点的方法,就是使用shell中的$#vamname结构,它会返回任意一个替换了vamname的变量的长度(指内容,不是变量名),

脚本:只变换很长的行

    01

    #!/bin/sh

    02

    03

    # toolong.sh -- 使用fmt.sh格式化那些超过指定长度的长行

    04

    05

    width=72

    06

    07

    if [ ! -r "$1" ]; then

    08

    echo "Usage: `basename $0` filename" >&2

    09

    exit 1

    10

    fi

    11

    12

    while read input

    13

    do

    14

    if [ ${#input} -gt $width ]; then

    15

    echo "$input" | fmt.sh

    16

    else

    17

    echo "$input"

    18

    fi

    19

    done < $1

    20

    21

    exit 0

    这个脚本中处理输入文件的方法很有意思,

电脑资料

脚本:只变换很长的行》(http://meiwen.anslib.com)。首先用一个简单的 <$1 达到输入文件的目的,然后用一个 read input 将每行都解析下。

    如果你的shell环境中没有 ${#var} 记法的话,可以使用如下方法代替:

    1

    varlength="$(echo "$var" | wc -c)"

    但是,wc命令有一个十分让人生厌的特性,它的输出会有一个前导空格,目的是让输出列表排列的漂亮些。为了回避这个讨厌的问题,会有一个微小的改动,就是在通过最后一个管道时,只允许数字通过:[注: 在我的Linux中,没发现作者说的这个特性,并且使用了sed后,可能会有问题,需读者在自己的环境中检验]

    1

    varlength="$(echo "$var" | wc -c | sed 's/[^:digit:]//')"

    运行结果:

    01

    $ toolong ragged.txt

    02

    So she sat on, with closed eyes, and half believed herself in

    03

    Wonderland, though she knew she had but to open them again, and

    04

    all would change to dull reality--the grass would be only rustling

最新文章