[英]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.