标签: sed

使用bash获取第一行的第二个单词

我正在编写一个简单的脚本,需要使用bash命令来获取第一行的第二个单词.在下面的文件中,我想只打印出"主机",虽然我在这方面遇到了麻烦.

-bash-3.2$ cat filewithstuff
SERVERNAME      host
DOMAIN          all-nfs


-bash-3.2$ cat filewithstuff | awk  '{print $2}'
host
all-nfs
Run Code Online (Sandbox Code Playgroud)

我能够在linux主机上使用以下命令:

cat filewithstuff | sed -n 1p | awk "{print \$1}"
Run Code Online (Sandbox Code Playgroud)

虽然当我从Python脚本运行它时,我得到以下错误:

Executed: /bin/bash -l -c "cat filewithstuff | sed -n 1p | awk \"{print \\$1}\""

Aborting.

Fatal error: One or more hosts failed while executing task 'uninstallApp'

Aborting.
Run Code Online (Sandbox Code Playgroud)

似乎我的Python脚本不喜欢bash命令中的"\",有没有人知道我可以尝试的替代命令?

python linux bash awk sed

-3
推荐指数
2
解决办法
2695
查看次数

Perl vs SED在区分大小写(是SENSITIVE)搜索方面

我成功使用以下命令将文本参数($ 1)替换为$ 2,但是它忽略大小写。我想区分大小写。SED可以进行区分大小写的搜索,还是应该使用perl?Perl中的命令敏感等效命令是什么?

 sed -i -e "s/$1/$2/g" "$2/index.html"
Run Code Online (Sandbox Code Playgroud)

perl sed

-3
推荐指数
1
解决办法
53
查看次数

在文件末尾添加一个新行

我已经看到了为每个文件添加新行的方法(10个文本文件+一次),但这通常涉及创建一个新文件..有没有办法添加新行而不需要制作临时文件(基本上是源文件和dest文件应该相同).

python bash perl sed

-4
推荐指数
1
解决办法
1157
查看次数

Linux:删除以[开头]的行

我知道我可以使用grep -v'^#'来删除以#开头的行

现在我遇到问题,当我尝试这样做去除[即.grep -v'^ ['甚至是sed'/ ^ [/ d'

为什么会发生这种情况?如何实现这一目标?

linux grep sed

-4
推荐指数
1
解决办法
329
查看次数

如何:在Bash中转换标题案例规则之后的文本

如何在遵循规则的同时将字符串转换为标题大小写,而不仅仅是简单地将单词的每个首字母大写?

示例规则:

  • 将所有单词大写,但以下情况除外:
  • 小写所有文章(a,the),介词(to,at,in,with)和协调连词(和,但是,或)
  • 无论词性如何,都可以将标题中的第一个和最后一个词大写

在bash中执行此操作的任何简单方法?单行赞赏.

(正如另外一点,这是用于parcellite行动.)

string bash awk sed tr

-4
推荐指数
1
解决办法
1986
查看次数

如何在bash中小写和替换空格?

在PHP中:

$output = preg_replace("/[^a-z]/","_",strtolower($input));
Run Code Online (Sandbox Code Playgroud)

如何在BASH脚本中执行相同的操作?

regex bash perl sed

-5
推荐指数
2
解决办法
349
查看次数

每行输出小计,同时加上数字,每行一个

例如,我有一个看起来像这样的文件:

2
4
7
-3
5
-2
Run Code Online (Sandbox Code Playgroud)

我需要输出看起来像这样:

2
6
13
10
15
13
Run Code Online (Sandbox Code Playgroud)

bash shell perl awk sed

-6
推荐指数
1
解决办法
91
查看次数

命令"打印所有行开头"

我正在寻找一个perl命令,其中打印以字符串开头的行.例如,如果我想打印以"1234"开头的所有行,该命令会是什么样的?桑达?AWK?grep的?

unix perl awk command sed

-7
推荐指数
1
解决办法
2124
查看次数

为什么不在perl中使用awk?

可能这个问题多次被问到能否在你的perl脚本中加入awk one liner.但是这些问题对于以下问题过于具体:

  1. 提供了一种不同的方法作为建议或
  2. 现有代码中的语法已被纠正OR
  3. 大多数时候 - >解决方案是使用perl提供的,因为专家喜欢使用awk或perl,因为他们都做同样的工作.是.也许.但我认为awk是针对特定问题而设计的,这些问题可以在awk中比perl更好地解决.

示例:我有输出,ls -lart第9列是文件名.我很容易在awk中做到这一点ls -lart|awk '{print $9}'.同样的事情当然可以使用perl来完成readdir().但是在perl中提取第8列或第7列并不容易?如果我必须提取数据管道将其管道输送到sed等,情况会变得更糟.

另一个例子: 我有一个特定的DIR,它有许多格式的文件,如:

ABC_9090_DEF_10-22-30_13-07-2014.temp
Run Code Online (Sandbox Code Playgroud)

注意date_time.temp标记部分.这里的格式是ABC_4digits_DEF_hours-minutes-seconds_day-month-year

我想只看到刚刚创建的新文件(比如说从现在起5分钟之前).使用awk/sed的方法是(伪代码,让我知道你是否需要我复制实际的一个班轮):

  1. ls -lart|awk '{print $9}'|
  2. egrep 提取10-22-30_13-07-2014
  3. 使用sed替换_ with - | awk重新排列以具有YEARMONTHDAYHOURSMINUTESSECONDS格式的数字.
  4. 使用awk再次比较这个数字使用if($ 1> $ mynum)对变量(假设有一个相同格式的数字代表TODAYS TIME - 5分钟)

问题: 但由于某种原因(其他复杂性)我想在perl中编写它并且我发现当使用系统命令在perl中使用它时,if条件if($ 1> $ mynum)会抛出错误.它说使用'>'语法错误,即使使用单引号,双引号,没有引号.

有人可以告诉我一般情况:

  1. 如果给出选择,为什么有人不会在这种情况下使用awk,sed而不是perl?
  2. 在perl中包含awk或sed时应该记住的事情的一般解释不是特定于这个问题(希望也应该解决这个特定的问题).

regex perl awk sed

-9
推荐指数
1
解决办法
248
查看次数

对目录中的所有文件运行命令

我正在尝试从文件夹中的许多文件中删除多个XML标记.我试过sed,但它一次只能在一个文件上运行.

这是我用于从单个文件中删除的sed代码.调用包含多个文件的文件夹rcv1.

sed -e 's/<[^>]*>//g' sk.xml

a.xml  
b.xml  
c.xml   
d.xml
Run Code Online (Sandbox Code Playgroud)

我试图使用的代码是:

for file in *.xml do sed -e 's/v[^]*>//g' "$file"
Run Code Online (Sandbox Code Playgroud)

编辑:预先find ./ -type f -exec与fedorqui的答案结合使用:

find ./ -type f -exec sed -i 's/<[^>]*>//g' {} \;
Run Code Online (Sandbox Code Playgroud)

xml unix shell information-retrieval sed

-9
推荐指数
1
解决办法
1175
查看次数

标签 统计

sed ×10

perl ×6

awk ×5

bash ×5

linux ×2

python ×2

regex ×2

shell ×2

unix ×2

command ×1

grep ×1

information-retrieval ×1

string ×1

tr ×1

xml ×1