unix 在bash中查找确定词的所有出现项并提取下一个词

aoyhnmkz  于 2022-12-03  发布在  Unix
关注(0)|答案(7)|浏览(182)

我在一个.txt文件中多次发现单词“picture:”。如何提取"pictures:"后面的所有单词并保存在文本文件中
我尝试了下面的代码,但不起作用:

cat users_sl.txt |awk -F: '/^login:"/{print $2}' cookies.txt

user_sl.txt
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quis picture lobortis scelerisque fermentum dui faucibus in ornare quam. Est ullamcorper eget nulla facilisi etiam dignissim diam quis. Quis viverra nibh cras pulvinar mattis nunc sed. Turpis massa sed elementum picture tempus egestas. Condimentum vitae sapien pellentesque habitant. Et molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Tincidunt lobortis feugiat vivamus at augue eget arcu picture dictum varius. Donec massa sapien faucibus et molestie ac feugiat sed. Tincidunt eget nullam non nisi est. Ornare arcu dui vivamus arcu. Mattis enim ut tellus elementum sagittis vitae et leo duis
picturelist.txt:

lobortis
dictum
tempus
lqfhib0f

lqfhib0f1#

好吧,我假设您实际上只有picture而不是**picture:**,并且您可能需要处理换行符,所以...

$ cat sl.txt 
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Quis picture lobortis scelerisque fermentum dui faucibus in ornare quam.
Est ullamcorper eget nulla facilisi etiam dignissim diam quis.
Quis viverra nibh cras pulvinar mattis nunc sed.
Turpis massa sed elementum picture tempus egestas.
Condimentum vitae sapien pellentesque habitant.
Et molestie ac feugiat sed lectus vestibulum mattis ullamcorper.
Tincidunt lobortis feugiat vivamus at augue eget arcu picture
dictum varius. Donec massa sapien faucibus et molestie ac feugiat sed.
Tincidunt eget nullam non nisi est.
Ornare arcu dui vivamus arcu.
Mattis enim ut tellus elementum sagittis vitae et leo duis

$ cat sl.txt | tr '\n' ' ' | grep -o 'picture [^ ]*' | cut -d' ' -f2
lobortis
tempus
dictum

编辑:说明:
tr '\n' ' '将每个(unix)换行符替换为一个空格--使整个内容成为一行。
-o标志告诉grep只返回匹配的字符串。搜索模式以picture和一个空格picture开始,然后是后面所有不是空格的字符串:[^ ]* .
最后,cut使用空格字符作为分隔符-d ' '打印第二个字段:-f 2

wh6knrhe

wh6knrhe2#

您提供的代码似乎不正确。应该使用awk命令在文件中搜索单词“picture:”并打印它后面的单词。下面是一个如何执行此操作的示例:

awk '/picture:/{getline; print}' users_sl.txt > output.txt

此命令将在文件users_sl.txt中搜索模式'picture:',然后获取下一行并将其打印到名为output.txt的文件中。
以下是命令的细目分类:

  • awk:这是运行awk程序的命令。
  • /picture:/:这是awk将在输入文件中搜索的模式。在本例中,我们将搜索单词“picture:”。
  • getline:这是一个awk函数,用于从输入文件中获取下一行。
  • print:这是一个awk函数,用于将当前行打印到输出文件。
tp5buhyn

tp5buhyn3#

使用bash时:

#!/bin/bash

arr=( $(<user_sl.txt) )
for ((i=0; i<${#arr[@]}; i++)); do
    if [[ ${arr[i]} == picture ]]; then
        printf '%s\n' "${arr[i+1]}"
    fi
done | tee picturelist.txt

输出

lobortis
tempus
dictum
cigdeys3

cigdeys34#

使用perl时:

$ perl -nE 'say for /\bpicture\b\s+(\w+)\b/g' user_sl.txt | tee picturelist.txt
lobortis
tempus
dictum
kq0g1dla

kq0g1dla5#

使用awk时:

$ awk '{
    for (i=1; i<=NF; i++) {
        if ($i == "picture") print $(i+1)
    }
}' user_sl.txt | tee picturelist.txt


第一次

xn1cxnb4

xn1cxnb46#

您提供的程式码无法运作,因为其中有一些语法错误。要撷取'pictures:'字之后的所有字,并将它储存在文字档中,正确的语法是:

cat users_sl.txt | awk -F "picture:" '{print $2}' > picturelist.txt

上面的命令将提取输入文件中“picture:”后面的所有单词,并将其保存在名为“picturelist.txt”的文件中。
以下是该命令的工作原理:

  1. cat users_sl.txt-将文件“users_sl.txt”的内容打印到标准输出。
  2. awk -F "picture:" '{print $2}'-这是命令的核心部分。它使用awk命令提取“picture:”后面的单词。-F选项用于指定分隔符(在本例中,它是“picture:”),$2用于提取第二个字段(“picture:”后面的单词)。
  3. > picturelist.txt-将awk命令的输出重定向到名为“picturelist.txt”的文件。
    我希望这对你有帮助。如果你有任何问题,请告诉我。
c90pui9n

c90pui9n7#

将数据放在文本文件中。
在狂舞中奔跑。

cat textfile                    | \
    grep -o 'picture:\*\*[^ ]*' | \
    sed 's/.*\*\(.*\)/\1/g';

相关问题