簡體   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