linux - 如何使用 'sed' 从 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
这种方式捕获命令的输出:
dat="$(date +%j)"
或者当您需要遵守旧外壳时,可以这样:
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
推荐阅读
- sql - 在 Impala SQL 中获取时间戳行的差异,每次都会更新差异条件
- django - Djongo 不断关闭并为每个请求创建新的 MongoClient DB 连接
- javascript - 我应该如何在 Odoo 14 中重新定义这个 OWL js?
- python - 哪种方法是使用 python 获取具有近 5000 万条记录的表的最有效和防故障的方法?
- arrays - Laravel 6 Collection Transform 数组中的索引函数
- python - 如何在 Python 中使用正则表达式(re.finditer)在字符串中的任何位置找到所有匹配项?
- powershell - 无法使用 PowerShell 将文件从文件夹上传到报表服务器文件夹
- macos - 通过 osx-terminal 更改 plist dic/string
- javascript - 在光滑的滑块中,我想对按钮选择执行过滤操作
- python - 如何使用python中的函数和循环获得投资金额每年的复利输出?