如何在等号后仅打印第一个单词

时间:2016-10-13 13:07:12

标签: bash shell unix

enter image description here

输入文件(存在于(8,)中):

/sys/test/list.txt

我需要使用shell脚本打印下面的值:

"BA_FN" = "John"    <<NEW>>

"BA_ACCOUNT_NO" = "AACtesting56"    <<NEW>>

"BA_BILLINFO_ID" = "BULCA8-67"    <<NEW>>

"BA_LN" = "winslet"    <<NEW>>

有人可以帮我吗?

5 个答案:

答案 0 :(得分:0)

假设内容位于文件sample.txt中,它看起来像

"BA_FN" = "John"    <<NEW>>

"BA_ACCOUNT_NO" = "AACtesting56"    <<NEW>>

"BA_BILLINFO_ID" = "BULCA8-67"    <<NEW>>

"BA_LN" = "winslet"    <<NEW>>

我们可以使用以下命令打印

cat sample.txt |awk -F"=" '{split($2,a," ");gsub(/"/, "", a[1]);print a[1]}'

输出

John

AACtesting56

BULCA8-67

winslet

答案 1 :(得分:0)

这应该做你想要的:

awk '{print $3}' sample.txt | sed 's/"//g'

输出:

John

AACtesting56

BULCA8-67

winslet

要打破它:

默认情况下,

awk用空格分隔每个字段。 sample.txt的每一行都有4个字段。在第一行:

  • 第一个字段"BA_FN"

  • 第二个字段=

  • 第3个字段"John"

  • 第4个字段<<NEW>>

由于您需要打印第3个字段:awk '{print $3}'

这个例子中的

sed就是这样的:

sed 's/pattern/replacement/g'

因此,在这种情况下,sed 's/"//g'只是删除所有出现的"并用空字符串替换它们。

答案 2 :(得分:0)

你可以试试这个:

 cat /sys/test/list.txt | cut -d "=" -f2 | awk '{print $1}'| sed 's/"//g'| grep -v "^$"

并将显示:

John

AACtesting56

BULCA8-67

winslet

但是如果你想抑制空行,你可以试试这个。

Table 1                 
package_name               Vendor        applicationname        
TibcoBusnsStudio_360_00    tibco         Tibco Business Studio          

这将显示:

John
AACtesting56
BULCA8-67
winslet

答案 3 :(得分:0)

"分开

awk -F '\"' '{print $(NF-1)}' file

答案 4 :(得分:0)

如果你不太关心空行,那么好老grep grep怎么样:这将在" = "" <>之间打印任何内容。

grep -oP '(?<=" = ").*?(?=" <>)' inputfile
John
AACtesting56
BULCA8-67
winslet

或者你想保留记录之间的空行:

awk '{gsub(/\"/,"",$3);print $3}' inputfile
John

AACtesting56

BULCA8-67

winslet