Shell 脚本 -- 逐行搜索和编辑



我正在尝试编写一个可以首先读取脚本文件的shell脚本。然后搜索包含我选择的"关键字"的行,然后在行尾添加一些单词。这些"关键词"只出现在乞求的行中。

这是我到目前为止所做的:

#!/bin/bash
filename="$1"
while IFS='' read -r line; do
echo "$line"
done < "filename"

我尝试是否可以将一行分成几个字段,但我失败了。因为我想然后使用"if"进行搜索。但似乎"read"命令只能将整行保存到一个变量中。

这是我尝试过的:

#!/bin/bash
filename="$1"
while IFS='' read -r f1 f2 f3; do
echo "$f1"
done < "filename"

但它的输出是一回事。

有人可以给我一些建议吗?

以前:

Final=$(date -d "2016-12-15 14:00" "+%j")
while true ; do
Today=$(date "+%j")
Days=$((Final - Today))
if (( Days >= 14 )) ; then
echo party
elif (( Days >= 2 )) ; then
echo study
elif (( Days == 1 )) ; then
for Count in 1 2 3
do
echo panic
done
else
break
fi
sleep 8h
done

后:

Final=$(date -d "2016-12-15 14:00" "+%j")
while true ; do   # loop 1
Today=$(date "+%j")
Days=$((Final - Today))
if (( Days >= 14 )) ; then   # selection 1
echo party
elif (( Days >= 2 )) ; then
echo study
elif (( Days == 1 )) ; then
for Count in 1 2 3   # loop 2
do
echo panic
done   # loop 2
else
break
fi   # selection 1
sleep 8h
done   # loop 1

由于您希望给定的行格式保持不变,因此我们必须首先将行作为一个整体read(就像您对IFS='' read -r line所做的那样),然后将其分开以检查命令关键字。

#!/bin/bash
filename=$1
while IFS='' read -r line   # read whole line
do  set -- $line            # split to fields
case $1 in
while|for) comment="    # loop $((++loop))";;
done) comment="    # loop $((loop--))";;
if) comment="    # selection $((++slct))";;
fi) comment="    # selection $((slct--))";;
*) comment=;;
esac
echo "$line$comment"
done <"$filename"

最新更新