Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Grep或Awk查找字符串并存储到数组中_Awk_Grep_Extract - Fatal编程技术网

Linux Grep或Awk查找字符串并存储到数组中

Linux Grep或Awk查找字符串并存储到数组中,awk,grep,extract,Awk,Grep,Extract,我想按以下模式打印字符串。我想把它存储在一个数组中。请帮帮我,我需要如下订单 test11 orcl 我的命令/尝试 egrep -i ":Y|:N" /etc/oratab | cut -d":" -f1 | grep -v "\#" | grep -v "\*" | tr -d '\n' | sed 's/ /\n/g' | awk '{print $1}' 以上命令O/p: test11orcl Oratab的内容如下: [oracle@rhel6112脚本]$cat/etc/ora

我想按以下模式打印字符串。我想把它存储在一个数组中。请帮帮我,我需要如下订单

test11
orcl
我的命令/尝试

egrep -i ":Y|:N" /etc/oratab | cut -d":" -f1 | grep -v "\#" | grep -v "\*" | tr -d '\n' | sed 's/ /\n/g' | awk '{print $1}'
以上命令O/p:

test11orcl
Oratab的内容如下:

[oracle@rhel6112脚本]$cat/etc/oratab
#
#此文件由ORACLE实用程序使用。它是由root.sh创建的
#并在创建时由数据库配置助手更新
#数据库。
#冒号“:”用作字段终止符。新行终止
#条目。以磅符号“#”开头的行是注释。
#
#参赛作品的形式如下:
#$ORACLE\u SID:$ORACLE\u HOME::
#
#不允许具有相同$ORACLE_SID的多个条目。
#
#  
test11:/u01/app/oracle/product/11.2.0/dbhome\u 1:N
orcl:/u01/app/oracle/product/10.2.0/db_1:N
Cat输出结束

从上面的文件中,我试图提取
:/

之前的字符串作为开始,请尝试以下操作:

$ cat input.txt
test11:/u01/app/oracle/product/11.2.0/dbhome_1:N
orcl:/u01/app/oracle/product/10.2.0/db_1:N

$ awk -F: '{print $1}' input.txt
test11
orcl
更新

使用bash:

#!/bin/bash

ARRAY=()
while read -r line
do
    [[ "$line" = \#* ]] && continue
    data=$(awk -F: '{print $1}' <<< $line)
    ARRAY+=($data)
done < input.txt

for i in "${ARRAY[@]}"
do
    echo "$i"
done

您还可以使用
sed

sed -r 's/^([^:]*):.*$/\1/g' file
示例:

$ cat cc
test11:/u01/app/oracle/product/11.2.0/dbhome_1:N
orcl:/u01/app/oracle/product/10.2.0/db_1:N
$ sed -r 's/^([^:]*):.*$/\1/g' cc
test11
orcl


谢谢,但是当我把它放入shell脚本时,我不能打印相同的内容。它的打印方式如下:test11 orcl My shell script:osid=`egrep-i':Y|:N“$loc|u ora | cut-d”:“-f1 | grep-v”\\#“| grep-v”*”| sed-r's/^([^:]*):.$/\1/g',我不理解你使用shell脚本的意图。上面的AWK不是为您工作吗?我尝试使用AWK如下,AWK-F:“{打印$1 }”/ETC/ORATAB O/P OracATB的全部内容正在打印,然后打印出2个字符串。我看,如果忽略以“代码< > <代码> >开始的行,您可以使用‘AWK-F:/^ ^ / {NeX}{打印1美元}输入。TXT’OK,我可以删除空白区吗?为什么呢?因为我需要将每个字符串存储到一个数组中,这样我就可以从该文件中创建一个字符串列表。谢谢,但是当我在脚本中执行相同操作时,我无法提取特定的字符串。osid=`egrep-i:Y |:N”/etc/oratab | cut-d:“-f1 | grep-v”\\#“| grep-v”*“| sed-r's/^([^::]*):.$/\1/g'/etc/oratab因为oratab文件有很多注释行,因此,我只想从该文件的N行中提取字符串。张贴
/etc/oratab
文件的确切内容,并从中提出另一个问题。请张贴问题中的内容@Karthiksingdba如果没有
,我将编辑它。发布cat命令的精确输出。@KarthikSinghDBA查看我的上一次编辑。它将根据您的输入工作。
sed -r 's/^([^:]*):.*$/\1/g' file
$ cat cc
test11:/u01/app/oracle/product/11.2.0/dbhome_1:N
orcl:/u01/app/oracle/product/10.2.0/db_1:N
$ sed -r 's/^([^:]*):.*$/\1/g' cc
test11
orcl
$ sed -nr 's/^(.*):\/.*$/\1/p' file
test11
orcl