繁体   English   中英

如何使用 'sed' 从 txt 读取一行?

[英]How do I use 'sed' to read a line from txt?

我正在尝试使用一个变量(一年中的 365 天,使用 +%j)来搜索一个 txt 文件,使用该变量来查找行号。

我不知道如何将下面的“1p”替换为..“$dat + p”之类的东西。 我没有想到或在网上找到任何东西都行不通,我想我只是没有想出足够好的搜索词来解决这个问题。

这是我到目前为止所拥有的:

#!/usr/bin/bash
dat= date +%j

arg=$(cat /home/adam/dailyverses.txt | sed -n '1p')

echo $arg

首先你需要这样捕获date命令的 output :

dat="$(date +%j)"

或者当您需要遵守旧的 shell 时,可以这样:

dat=`date "+%j"`

我正在尝试使用一个变量(一年中的 365 天,使用 +%j)来搜索一个 txt 文件,使用该变量来查找行号。

所以我认为sed不是正确的工具。 试图进行替换不是正确的方法。

搜索模式并获取与此模式匹配的行号: grep将是完美的选择:例如:

grep -nE "^.*${dat}.*$" /home/adam/dailyverses.txt|cut -d: -f1

您也可以使用bash来做到这一点:

line_number=1
while read -r; do
  [[ $REPLY =~ ^.*${dat}.*$ ]] && echo "${line_number}"
  (( line_number++ ))
done < "/home/adam/dailyverses.txt"

awk

awk 'BEGIN {count = 1} {count++; if($0 ~ "^.*'"${dat}"'.*$"){print count}}' "/home/adam/dailyverses.txt"

当然,您可以根据需要更改正则表达式。

我不知道如何将下面的“1p”替换为..“$dat + p”之类的东西。

这与您之前询问的“查找行号”并不是一回事。 但如果这是你真正想要的:

dat="$(date +%j)"
sed -n "${dat}p" /home/adam/dailyverses.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM