Bash脚本:从文件中打印grep行

断脚

我正在尝试grep匹配某些模式的行,然后尝试打印那些匹配的行。

#!/bin/bash

file=/path/to/some/file
pattern=socket
if [ -f $file ]; then
    lines=`grep -i "$pattern" $file`
# Case 1
    for x in $lines; do   # <--- isn't this an array
        echo "$x"                                                                                                                                                                                                                                                                
        done
# Case 2
    while read -r line_a; do
        echo "$line_a"
        done <<< "$lines"
fi

输出:
情况1:不是完整的行,而是将这些行中的各个单词打印在每一行上。
情况2:逐行打印。

问题:
为什么情况1不在一行上打印整行,而不是在每一行上打印该行中的单个单词?是不是$lines一个字符串数组(在我的情况下是行)?

Pankrates

当前,您正在使用向后滴答来捕获输出,该滴答会将整个输出视为一个大字符串。如果要将其捕获为数组,请使用以下符号

lines=($(grep -i "$pattern" $file))

但是,默认记录分隔符为空格,因此每个数组元素将是一个单词,而不是grep输出中的整行您可以通过(临时)更改记录分隔符IFS来分割换行符来避免这种情况整个解决方案如下所示

IFS=$'\n'
lines=($(grep -i "$pattern" $file))
for x in ${lines[@]}; do
    echo $x
done

请注意,您现在已经更改IFS了外壳程序,并且可能需要将其重置为旧值。如您所见,这种方法很可能不是最适合您的问题的方法,但我在此处将其发布以回答您的原始问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

grep输出仅在bash脚本中打印一行

来自分类Dev

在Bash中,用grep表示一行,并在文件中打印该行,但包含更多信息

来自分类Dev

grep输出仅在bash脚本中打印单行

来自分类Dev

使用bash脚本编辑文件中的行?

来自分类Dev

使用bash脚本从.CSV文件中打印多个值

来自分类Dev

Bash脚本:在同一行中打印列数据

来自分类Dev

使用shebang脚本在文件的新行中打印

来自分类Dev

bash脚本中grep单行的shell脚本

来自分类Dev

如何简化此bash脚本,该脚本打印工作目录中的文件数?

来自分类Dev

如何在bash中从文件末尾打印第n行?

来自分类Dev

使用sed命令从bash脚本中的文件中删除行

来自分类Dev

bash脚本在特定文件夹的xml文件中查找/ grep特定字符串

来自分类Dev

bash脚本在特定文件夹的xml文件中查找/ grep特定字符串

来自分类Dev

Bash脚本-在文件中搜索高于搜索条件的行

来自分类Dev

Bash脚本读取文本文件中的随机行

来自分类Dev

Bash脚本读取文本文件中的随机行

来自分类Dev

使用bash脚本从XML文件中删除一行

来自分类Dev

Bash 脚本:替换文件中的一行

来自分类Dev

Bash,文件中的grep句子

来自分类Dev

脚本打印文件的行及其长度

来自分类Dev

bash脚本中的grep找不到项目

来自分类Dev

了解bash脚本中的grep模式

来自分类Dev

Unix在bash脚本中添加grep选项

来自分类Dev

bash脚本中的grep和mysql变量

来自分类Dev

bash脚本中的grep无法正常工作

来自分类Dev

Unix在bash脚本中添加grep选项

来自分类Dev

在bash脚本的列中打印文本

来自分类Dev

在 Array Bash 脚本中打印值

来自分类Dev

使用grep中的行号打印sed行