[英]How do I correctly use sed to search/replace parts of a line from a variable
[英]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.