我正在编写一个简单的脚本,需要使用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命令中的"\",有没有人知道我可以尝试的替代命令?
我成功使用以下命令将文本参数($ 1)替换为$ 2,但是它忽略大小写。我想区分大小写。SED可以进行区分大小写的搜索,还是应该使用perl?Perl中的命令敏感等效命令是什么?
sed -i -e "s/$1/$2/g" "$2/index.html"
Run Code Online (Sandbox Code Playgroud) 我已经看到了为每个文件添加新行的方法(10个文本文件+一次),但这通常涉及创建一个新文件..有没有办法添加新行而不需要制作临时文件(基本上是源文件和dest文件应该相同).
我知道我可以使用grep -v'^#'来删除以#开头的行
现在我遇到问题,当我尝试这样做去除[即.grep -v'^ ['甚至是sed'/ ^ [/ d'
为什么会发生这种情况?如何实现这一目标?
如何在遵循规则的同时将字符串转换为标题大小写,而不仅仅是简单地将单词的每个首字母大写?
示例规则:
在bash中执行此操作的任何简单方法?单行赞赏.
(正如另外一点,这是用于parcellite行动.)
在PHP中:
$output = preg_replace("/[^a-z]/","_",strtolower($input));
Run Code Online (Sandbox Code Playgroud)
如何在BASH脚本中执行相同的操作?
例如,我有一个看起来像这样的文件:
2
4
7
-3
5
-2
Run Code Online (Sandbox Code Playgroud)
我需要输出看起来像这样:
2
6
13
10
15
13
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个perl命令,其中打印以字符串开头的行.例如,如果我想打印以"1234"开头的所有行,该命令会是什么样的?桑达?AWK?grep的?
可能这个问题多次被问到能否在你的perl脚本中加入awk one liner.但是这些问题对于以下问题过于具体:
示例:我有输出,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的方法是(伪代码,让我知道你是否需要我复制实际的一个班轮):
ls -lart|awk '{print $9}'|egrep 提取10-22-30_13-07-2014问题: 但由于某种原因(其他复杂性)我想在perl中编写它并且我发现当使用系统命令在perl中使用它时,if条件if($ 1> $ mynum)会抛出错误.它说使用'>'语法错误,即使使用单引号,双引号,没有引号.
有人可以告诉我一般情况:
我正在尝试从文件夹中的许多文件中删除多个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)