grep 的 for 循环不按记录返回记录

grep 的 for 循环不按记录返回记录

我的 shell 脚本中有以下 for 循环:

#!bin/ksh
touch output.dat
IFS=">>>"
i=0
for stm in `grep "cpdctl dsjob run-pipeline --project " input_file`
do
echo "the current stmt is : $stm"
done

在我的输入文件中输入文件我有两条与模式匹配的记录。所以我期望输出是这样的

----Expected output
the current stmt is : "first line matching pattern"
the current stmt is : "second line matching pattern"

---Actual output
the current stmt is : "first line matching pattern"
"second line matching pattern"

the current stmt is :我的实际输出中缺少

你能让我知道我错过了什么吗?我也尝试过 AWK,但输出相同。我做了一些搜索,但找不到任何类似的问题。

[编辑]刚才我想到可能是因为IFS=“>>>”行我可能遇到这个问题。所以,包括我的完整代码。我添加了IFS=“>>>”因为我的记录包含空格字符,因此 for 循环在单独的行中返回它们。

答案1

使用awk

awk '/cpdctl dsjob run-pipeline --project / {print "the current stmt is :", $0}' input

这将打印包含以下内容的每一行cpdctl dsjob run-pipeline --project

答案2

抱歉给大家添麻烦了。下面的帖子帮助解决了这个问题。我最初将“\n”指定为 IFS,但它不起作用[下面的链接解释了原因]。感谢您提供的所有宝贵意见。 [https://stackoverflow.com/questions/16831429/when-setting-ifs-to-split-on-newlines-why-is-it-necessary-to-include-a-backspac][1]

相关内容