使用 grep 和 sed 进行 bash

使用 grep 和 sed 进行 bash

这是我们每周的练习,没有评分或等级(我们甚至没有得到答案!)

如果有人有时间帮助向我解释这项练习,我将非常感激,因为我正试图在周末完成这项工作,并且要到下周才能得到导师的帮助。我做了很多关于 bash 编程、正则表达式和 grep 的阅读和工作。但下面的代码让我感到困惑。

我什至想知道,说明是否不完整,或者我只是不明白?

具体来说,以下几点阻碍了我理解整个事情:

NAMES=`ls *.$1`

filed=$(file:$1).$2

练习 4.3
假设给你一个文本文件(称为 myfile),其中包含以下内容

#!/bin/bash

NAMES=`ls *.$1`

for file in $NAMES; do
    filed=$(file%:$1).$2
    mv file filed
done

执行以下命令 $ grep ' file ' myfile

 $ grep 'file*' myfile

 $ grep '^ *file*' myfile

 $ grep 'file$' myfile

 $ sed 's/ file* / script /g' myfile

 $ sed ' /for/,/files/d' myfile

 $ sed '/\$[A-Z]..[A-Z]*/d' myfile

然后解释输出或结果

答案1

NAMES=`ls *.$1`

这是一个任务。该变量$NAMES被分配了一个值。该值被视为反引号中命令的输出(请参阅 中的命令替换man bash)。$1是一个特殊参数,它对应于脚本的第一个参数。因此,似乎脚本应该以扩展名作为参数运行(例如./script.sh txt),ls命令的输出将存储在变量中。

filed=$(file%:$1).$2

这实在是太奇怪了。事实上,您确定括号不是大括号吗?并且还应该有 a.代替:.

filed=${file%.$1}.$2

${var%pattern}从变量末尾剪切模式。man bash详细信息请参见参数扩展。因此,在这种情况下,它会删除点加上第一个参数给出的扩展名,并添加一个点和第二个参数。

顺便说一句,移动线可能应该是

mv $file $filed

否则就没有理由使用循环。

相关内容