如何使用sed或grep打印第一个匹配的行?

时间:2018-05-18 09:48:44

标签: bash shell unix sed grep

我有一个配置文件,其中每一行的格式为UniqueOption = SomeValue

$ cat somefile  
option1sub1 = yes
option1sub2 = 1234
...
option1subn = xxxx
option2 = 2345
option3 = no
...

我想在循环中处理“option1”的每个值。但是,sedgrep一次性给我所有选项1。

我如何使用sedgrep实现这一目标,一次获得一个option1行?

5 个答案:

答案 0 :(得分:0)

grep的输出传递给while循环:

grep 'option1' somefile | while read line
  do
  echo "single option is in var $line"
  done

答案 1 :(得分:0)

解决方案1: 关注awk可能会帮助您获取option1字符串的最后一个值。

awk -F" = " '/^option1/{print $NF}'  Input_file

解决方案第二: 以上将打印字符串option1的所有值,以防您只需要字符串option1的第一个值,然后使用以下

awk -F" = " '/^option1/{print $NF;exit}'  Input_file

答案 2 :(得分:0)

以下内容将解析文件option1file.conf的所有子选项,并将其保存在bash数组中。然后可以从该阵列轻松访问这些选项。

#!/bin/bash

while IFS= read -r data; do
    opt1+=( "$data" )
done < <( awk -F ' *= *' '$1 ~ /^option1/ { print $2 }' file.conf )

printf 'Option 1, sub-option 1 is "%s"\n' "${opt1[0]}"

输出:

Option 1, sub-option 1 is "yes"

awk脚本将返回=(和任何空格)之后的所有内容,这样您就可以存储包含多个单词的数据。仅处理配置文件中以option1开头的行。

这将适用于将整个配置文件解析为单个结构,可能使用最新版本的bash中的关联数组。

答案 3 :(得分:0)

我们已经可以看到一些很棒的答案,但是当您向grep询问时,如果需要,可以使用以下其中一种。
对于所有值

grep option1 m | cut -d "=" -f2 | awk '{$1=$1};1' | head -1  

第一个值

TextViewR

这里:cut用于切割第二个选项uisng dilimiter =; awk用于修剪输出中的空格,head用于打印第一次出现的

答案 4 :(得分:0)

使用sed

user

使用gnu grep 2.20(支持pcre)

users

如果你只想获得第一场比赛

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|max:255',
        'role' => 'required|max:7',
        'username' => 'required|unique:users,username',
        'password' => 'required|min:6|confirmed',
    ]);
}