如何在linux中搜索字符串

时间:2017-09-17 13:10:45

标签: linux awk sed grep

如何在以下行中仅提取/ app / xxxx字段,并将df -P -T命令添加到提取的字符串中,并以下列格式保存输出

edlp_nps_app:x:23449:5000:EDLP_NPS_APP (HP):/app/edlp_nps_app:/bin/bash
genxp_app:x:23414:15887:GENXP_APP (HP):/app/genxp_app:/bin/bash
icegnapp:x:21697:15954:ICEGNAPP (HP):/app/icegnapp:/bin/bash
icegnftp:x:21554:15416:ICEGNFTP 
(HP):/app/icegnftp:/usr/libexec/openssh/sftp-server

df -P -T /app/XXXXX
df -P -T /app/edlp_nps_app
O/P:
Filesystem                 Type 1024-blocks     Used Available Capacity 
Mounted on
/dev/mapper/rootvg-rootvol ext4   144365708 27057836 110769428      20% /

我需要的输出是FS,类型,已安装,appname

/ dev / mapper / rootvg-rootvol \ textt / / app / edlp_nps_app

我尝试了awk命令,但它没有工作

2 个答案:

答案 0 :(得分:0)

如果第6个字段以awk开头,则使用/app测试,如果为true,则打印第6个字段

awk -F':' '$6~/^\/app/{print "df -P -T "$6}' infile | bash

保存在档案

awk -F':' '$6~/^\/app/{print "df -P -T "$6}' infile | bash > outfile

为避免多次打印标题,您可以管道另一个awk,如下所示

awk -F':' '$6~/^\/app/{print "df -P -T "$6}' infile | bash | awk 'FNR==1{print;next}/Filesystem/{next}1' >outfile

测试结果:

输入:

$ cat file
edlp_nps_app:x:23449:5000:EDLP_NPS_APP (HP):/app/edlp_nps_app:/bin/bash
genxp_app:x:23414:15887:GENXP_APP (HP):/app/genxp_app:/bin/bash
icegnapp:x:21697:15954:ICEGNAPP (HP):/app/icegnapp:/bin/bash
icegnftp:x:21554:15416:ICEGNFTP 
(HP):/app/icegnftp:/usr/libexec/openssh/sftp-server

输出:

$ awk -F: '$6~/^\/app/{print "df -P -T "$6}' file 
df -P -T /app/edlp_nps_app
df -P -T /app/genxp_app
df -P -T /app/icegnapp

答案 1 :(得分:0)

  

extract / app / xxx

首先我们删除不包含/ app

的行
sed '/\/app/!d'

然后我们提取/ app /...

's|.*\(/app/[^:]*\).*|\1|'

组合:

sed '/\/app/!d;s|.*\(/app/[^:]*\).*|\1|'
  

我需要的输出是FS,类型,已安装,appname

     

/ dev / mapper / rootvg-rootvol \ textt / / app / edlp_nps_app

让我们通过仅提供相关字段来调整df的输出

df /app/foo --output=source,fstype,target

我不相信我们可以让df放弃标题,所以我们将其删除

df /app/foo --output=source,fstype,target | sed '1d'

我将手动附加应用名称并将其全部放在名为" magic.sh"的脚本中:

#!/bin/sh
if [ ! -f "$1" ]
then
    echo "Input file does not exist!"
    exit 1
fi

if [ -f "$2" ]
then
    echo "Output file already exists!"
    exit 2
fi

sed '/\/app/!d;s|.*\(/app/[^:]*\).*|\1|' $1 | while read -r app
do 
    echo "$(df $app --output=source,fstype,target | sed '1d') $app" >> $2
done

假设指定的输入位于名为&#34的文件中;输入"并且你希望结果在名为"输出"的文件中,这是如何调用它:

sh magic.sh input output