【问题标题】:passing variable to this particular sed command [duplicate]将变量传递给这个特定的 sed 命令
【发布时间】:2014-06-13 07:10:12
【问题描述】:

我首先搜索一个关键字,一旦在该特定行的文件中找到该关键字,我应该删除到文件末尾。

#! /bin/csh -f
set sa = `grep -n -m 1 "^Pattern" file`
set s = `echo "$sa" | cut -d':' -f1`   
set m = `sed '$s,$d' file | tee see > /dev/null`

所以第一行给了我与行号匹配的行,第二行我得到了行号,第三行我试图从 $s 行中删除,比如 20 到最后,但它不起作用。我已经尝试了所有组合,但它没有使用变量 $s。请帮忙。

【问题讨论】:

  • 你知道变量只在双引号内扩展,而不是在单引号内,不是吗?这是 Shell 脚本 101。
  • 我已经尝试过了,但它无法识别 $d。
  • 为什么你在使用csh时标记了这个bash?
  • 更好的问题:为什么要在 csh 中编写脚本? faqs.org/faqs/unix-faq/shell/csh-whynot

标签: unix sed csh


【解决方案1】:

但是你可以用一行 sed 更容易地做到这一点:

sed -n '/SEARCHPATTERN/q;p
  1. -n 告诉不要打印这些行
  2. /SEARCHPATTERN/q 退出搜索模式
  3. ;p 否则打印行

【讨论】:

  • 谢谢伙计。这也对我有用。
【解决方案2】:

你需要把$s从引号中去掉,这样它才会被扩展。

set m = `sed $s',$d' file | tee see > /dev/null`

【讨论】:

  • 抱歉标记 bash。有效。实际上这是我在 csh 中实现的脚本的几个部分之一。
猜你喜欢
  • 2019-02-16
  • 2017-12-15
  • 2019-09-11
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 2012-06-24
相关资源
最近更新 更多