正在寻找更好的Windows XP命令行界面。VisualStudio命令提示符不如Linux/OSX终端好
想法
编辑:
回答:Sourceforge上的控制台和Windows Powershell。谢谢,我去把它们挖出来评估一下。
Cygwin包的开销太大,无法满足我的需求
edit2:
现在看起来像是Windows Powershell。它的复制和粘贴功能不是很好,但MS支持它 看看控制台2
它的特点是:
“多个选项卡、文本编辑器(如文本选择)、不同的背景类型、alpha和颜色键透明度、可
以下测试脚本有问题。当我在脚本中添加sleep5&行时,whileread循环不会从文件中读取所有行,而是只打印第一行
但是当我从脚本中删除sleep5&时,脚本会打印文件中定义的所有行
为什么睡眠会导致这种情况
如何解决这个问题?我想创建一个新的进程,睡眠只是while循环中的一个例子
$ more test
#!/bin/ksh
while read -r line ; do
echo $line
( sleep 5 )&
RESULT=$!
sleep 1
kill $
我想更改files的文件名后缀(使用bash脚本),但有时有些文件有一个句点,有些文件有两个句点
现在我用这个:
new_file=`echo ${file} | sed 's/\(.*\.log.*\)'${suf}'/\1.'${num}'/'`
其中,“new_file”是新文件名,“file”是原始文件名,${suf}是文件的后缀,${num}是一个新数字
因此,some.log必须变成some.log.1,some.log.1必须变成some.log.2。在我的代码中,some.lo
假设我有这样一个字符串:
blah=-Xms512m
我希望输出为512
我知道我可以在Linux上使用grep获得它,如下所示:
echo$blah | grep-o-e[0-9]\\+
但这在Solaris上不起作用
有什么好的解决方案可以在Linux和Solaris上兼容吗?
或者至少在Solaris上?如果您知道这些数字会这样组合在一起:
pax> echo 'blah=-Xms512m' | sed 's/[^0-9]//g'
512
它基本上用零替换所有非数字字符。当然,它不
我正在制作一个自动创建用户的shell脚本,但我想不出如何在shell脚本中使用passwd命令,我应该如何将它与shell脚本一起使用--stdin选项对我不起作用试试。一些passwd的实现具有--stdin标志,您可以这样使用:
passwd --stdin user <<<"SoMePasSw0rd"
passwd--stdinuser在Debian上为我工作
echo -e "$NEWPASS\n$NEWPASS" | passwd $USER
我在网上读了很多关于“tr”命令用法的教程。
但是,我无法理解如何用shell脚本加密电子邮件地址,并使用rot13转换字符。任何人都可以给出一个链接或一个例子吗?不确定您想如何使用它,但这里有一个基本的例子可以让您开始:
echo 'fooman@example.com' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
为了简化操作,您可以在.bashrc文件中将tr命令别名为:
alias rot13="tr 'A-Za-z' 'N-ZA-Mn-za-m'"
现在你可以打电话:
我还是Unix新手。是否可以一次运行多个Unix命令?比如把我想运行的所有命令写在一个文件中,然后在我调用该文件后,它会运行该文件中的所有命令?或者有没有我不知道的方法(或更好的方法)
感谢您提供所有的意见和建议,我将不胜感激。简短的回答是,是的。这个概念被称为shell脚本,或bash脚本(一种常见的shell)。为了创建一个简单的bash脚本,请创建一个文本文件,顶部有:
#!/bin/bash
然后将命令粘贴到其中,一行一行
保存文件,通常扩展名为.sh(但不是必需的),您可以像以下方式
我要读取文件的第二行:
$(sed -n 2p $file)
这很好,但我只想读这行,直到第一个空格。
有什么办法吗?这个怎么样:
$ sed -n 2p $file | cut -d " " -f1
您可能想尝试以下方法:
$(sed -n '2s/ .*//p' $file)
它与您的类似,只是s命令将空格及其后的任何内容(*)替换为零,即删除行的其余部分。您可以将行拆分为一个数组,然后一次读取一个字
while IFS=" " read -a word; do # storing t
我有一个dnapars程序
我从命令行执行程序,如下所示:
/德纳帕
然后,程序会以用户菜单的形式提示我一些消息,我必须从中选择一系列选项(按R U Y R的顺序),然后将输出文件(输出文件)复制到另一个结果文件中。
我编写了下面的脚本,但是执行挂起在应该执行R选项的地方
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
do
cp ../../../EditDistanceRandomParsimonator/RAxML_p
我需要做一个for循环,但我对shell比较陌生。我想要相当于:
For i = 1 to limit
正如在Visual basic中一样,“limit”是一个变量,设置为我希望for循环持续多长时间。for I,单位为$(seq 1 limit);做完成如果:
limit=10
然后在zsh中使用:
for i in {1..$limit}; do echo $i; done
在bash中,使用jordanm或Lars Kotthoff建议的答案,或使用以下内容:
for i in $
让我们使用以下prolog库:
father(anakinSkywalker, princessLeia).
father(anakinSkywalker, lukeSkywalker).
saysOhNo(lukeSkywalker).
在swi prolog中,通过shell调用进行了询问,并得到了一个答案,该答案给出了对查询的手动转换,即isue写入
swipl -q -s kb.pl -t "father(anakinSkywalker,X), writeln(X), false"
我有一个包含多行文件的文件。我还有一个目录,其中包含所有文件,现在我想通过shell脚本查找文件中列出的文件是否存在于目录中。迭代并测试
cat filelist.lst | while read filename
do
if [ -f directory/$filename ]
then echo File $filename exists
# build up a list
exists="$exists directory/$filename"
我需要在脚本中处理10个以上的参数。
我在第9个参数后声明并赋值,如下所示
param10=${10}
param11=${11}
param12=${12}
它在linux中运行良好,但在solaris中则不行。我得到了糟糕的替代
有谁能帮我读取10个以上的参数,这对solaris和linux都适用。可能已经过时,但根据:
Bourne shell仅支持位置参数$0到$9。
要访问参数10或更大,必须使用“shift”
指挥部。班次将从$2移动到$1,从$3移动到$2,等等($0是
正在调用
请告诉我是否可以在AWK脚本中使用嵌套的getline,如:
while ( ("tail -f log" |& getline var0) > 0) {
while ( ("ls" | getline ) > 0) {
}
close("ls")
while ( ("date" | getline ) > 0) {
}
close("date")
}
close("tail -f log")
我们可以利用嵌套
我试着比较两个数字,下面的代码有什么错误
filesize=$(stat -c '%s' ${FILENAME})
if [ $filesize -gt 12 ] ; then
echo "Yes bigger ";
fi
我没有收到任何错误,但我从未打印过“是的,更大”字样。解决了它。在比较之前,我重复了“文件大小”
filesize=$(stat -c '%s' ${FILENAME})
if [ $filesize -gt '12' ] ;
我正在尝试创建一个shell脚本:
将文件从我的日志目录复制到单独的目录以进行分析
Gunzips文件并查找文本模式
将该模式输出到文件以供进一步分析
删除所述文件
我正试着分阶段做这件事。到目前为止,我还没能离开地面。叹息
我从这里提取了这个示例,并开始修改它:
#!/bin/bash
FILES= `ls /opt/dir1/scripts/access_*.gz`
for i in $FILES
do
cp $i /tmp/apache
gunzip $i
我有一个巨大的数据集,比如说15-20GB,它是一个制表符分隔的文件。虽然我可以用Python或SQL来完成,但用Shell脚本来避免移动csv文件会更容易、更简单
例如,采用管道分隔的文件输入:
----------------------------------------
Col1 | Col2 | Col3 | Col4 | Col5 | Col6
----------------------------------------
A | H1 | 123 | abcd | a
嗨,我有下面的脚本
if [[ 'whoami' -eq "test" ]]; then
echo "test user"
else
echo "Not a test user"
fi
这将返回测试用户,即使我的用户不是文本。如果有人能指出我愚蠢的错误,那就太好了。你用单引号代替反勾号:
if [[ `whoami` -eq "test" ]]; then # Not 'whoami'
为了提高可读性和简化嵌套,如果适用,请使用
if [[ $(whoami) -eq
标签: Shell
unix-timestampleap-second
关于Unix(POSIX)时间,他说:
由于其对闰秒的处理,它既不是时间的线性表示,也不是UTC的真实表示
但是Unixdate命令实际上似乎并不知道它们
$date-d'@867715199'-utc
星期一6月30日23:59:59 UTC 1997
$date-d'@867715200'-utc
1997年7月1日星期二00:00:00 UTC
而1997年6月30日星期一23:59:60协调世界时应该有闰秒
这是否意味着只有date命令会忽略闰秒,而Unix时间的概念不会忽略闰秒?每天
我有一个文件,里面有名字和时间。我只想保留最新时间的条目。我该怎么做
例如:
>cat user.txt
"a","03-May-13
"b","13-May-13
"a","13-Aug-13
"a","13-May-13
我正在使用命令sort-u user.txt。它给出以下输出:
"a","11-May-13
"a","13-Aug-13
"a","13-May-13
"b","13-May-13
但是我想要以下输出
"a","13-Aug-13
"b","13-May-13
标签: Shell
versioningpython-imaging-library Pip
是否有pip命令来确定是否安装了最新版本的软件包
我正在编写一个shell脚本,需要确定是否安装了最新版本。如果没有,则我的脚本需要手动安装该包。(如果有人好奇,需要手动安装,因为libjpeg的标题和库位于非标准位置。)
介绍如何检索当前安装的软件包的版本,但我还需要可供下载的最新版本,以及比较版本的一些方法。'pip search'提供了这些信息。e、 g:
$ pip search SOAPpy
SOAPpy - SOAP Services for P
有人建议我如何在每个月的第一个星期一运行cron作业吗
对吗
0 0 ? * 1# /usr/aa1/finacc/bsheet
这应该起作用:
0 0 1-7 * 1 /usr/aa1/finacc/bsheet
各栏:
第0分钟
第0小时
月日1-7中的任意一天
任何月份
星期一你可以说:
0 0 1-7 * * [ "$(date +\%A)" == "Monday" ] && /usr/aa1/finacc/bsheet
用于在一个月的第一个星期一午夜执行命
sh版本:1.14.7
#!/bin/sh
cpu_to_eth1=10
cpu_to_eth2=20
cpu_to_eth3=30
cpu_to_eth4=40
i=0
for i in 1 2 3 4
do
echo "value of the $i th varible is $cpu_to_eth$i"
done
它工作不正常,输出应为
value of the 1 th varible is 10
value of the 2 th varible is 20
value of t
我希望对目录的所有文件以及该目录子目录中的所有文件执行以下命令:
cat filename | col -b > filename
此命令将从文件中删除控件M或^M字符,并可用于单个文件。请帮忙。。。
我在命令下试过,但不起作用。它适用于单个目录,但不适用于子目录
for i in *
do
cat i | col -b > i
done
find-类型f-exec sed-i的/^M/'{}
请注意,通过按ctrl-V然后按ctrl-M来执行^M,而不仅仅是^M
我有两个文件,我只需要打印第一个文件中的单词(不是完整的行),而不是第二个文件中的单词。我试过wdiff,但它打印完整的行,没有用
文件样本:
وكان مكنيل وقتها رئيس رابطة مؤرخي أمريكا ـ
كما فهمت - من شاهد الحادثة. ثم يصف كيف قدم
مكنيل الرجلين الخصمين, فكانت له صرامته, إذ
حدد عشرين دقيقة فقط لكل منهما أن يقدم رأيه
وح
我有一种奇怪的行为,我无法理解;在某些时候,我需要将一些标志传递给脚本,其中一个标志应该执行脚本中使用的一系列选项,例如,我调用脚本作为
sh script.sh --flag1="-options1=value1 -options2=value2" --flag2
结果是
-options1=value1
-options2=value2
1
,因此,flag1神奇地显示为一个多行声明,发生了一些事情,我真的不明白这种行为背后的逻辑
这是完整的脚本
parse()
{
while [
基本上,我想将几行代码从模板文件复制到脚本文件。
甚至可以使用sed复制一个包含与脚本交互的符号的字符串吗
我用了以下几句话:
$SWAP='sudo cat /home/kaarel/template'
sed -i -e "s/#pointer/${SWAP}/" "script.sh"
输出为:
./line-adder.sh: line 11: =sudo cat /home/kaarel/template: No such file or directory
该线路存在两个问题:
我是新的shell脚本。
我需要使用shell脚本在变量中保存具有特定扩展名(.properties)的文件数
我用过
ls |grep .properties$ |wc -l
但此命令打印文件夹中属性文件的数量。如何在变量中指定此值
我试过了
count=${ls |grep .properties$ |wc -l}
但它显示的错误如下:
./replicate.sh: line 57: ${ls |grep .properties$ |wc -l}: bad substitution
好的,所以我知道替换新行的最佳方法通常是执行类似于tr'\n'或类似的操作,但是这只适用于单个字符
我想做的是替换新行,但插入比单个字符更长的内容;在我的例子中,我实际上想添加一个时间戳,这样:
foo
bar
[11:30] foo
[11:30] bar
变成这样:
foo
bar
[11:30] foo
[11:30] bar
我需要通过替换新行字符本身来做到这一点,因为我不能保证最后一行输入将在我处理它时完成(例如,它可能是从printf“%s”的“foo”输出的,因此还没有行结
我有一个包含各种特殊字符的文档,例如éÆoºI
我编写了以下两个命令,它们都适用于“单一外观”字符,例如ñÈ
但是,这两种方法都不适用于上面列出的特殊字符
此命令使用两字节十六进制小数(用A替换A)
此命令使用utf8替换字符:
CHARS=$(python -c 'print u"\u00a9".encode("utf8")') sed -i 's/['"$CHARS"']/A/g' $filename
这两个命令中的任何一个都可以工作,但两个命令都不能工作。看起来您正在将UTF-8
我在本地系统上有一个脚本,它调用远程服务器(服务器a)上的脚本来执行。脚本中触发远程服务器脚本的命令如下所示
ssh <user>@<server ip> "bash -s < ./shell_backup_trx_db.sh"
ssh@“bash-s/dev/null 2\>\&1
然后
#触发mysql和mongo的生产数据库。
ssh@“bash-s&2
出口1
fi
为什么要使用bash-s
使用两级for循环和seq工作正常,代码
for i in `seq 0 3`; do for j in `seq 0 3`; do echo $i $j; done; done
给出了预期的输出:
0 0
0 1
1 0
1 1
但如果我想要一个更为定制的数字列表:
for i in '-1 4.5'; do for j in '0 -2.2'; do echo $i $j; done; done
我得到输出
-1 4.5 0 -2.2
有没有一个简单的方法可以做到这一点
var a
我继承了一个shell脚本,它使用变量执行命令。
我已经添加了更多的细节,很抱歉我之前不清楚细节,我对Shell脚本不是很熟悉
#!/bin/sh
ExecuteCommand () {
Command=`echo -e ${2}`
Comment=${4}
echo "INFO: ${Comment}"
echo "# ${Comment}" >> ${CommandsLog}
echo "${Command}" | paste -s -d'
标签: Shell
fedoraiptablesboot
我尝试了两三个小时,在Fedora23的引导过程中用脚本执行命令
我看到了一些关于chkconfig的教程,但在我的fedora上,我只有systemctl,chkconfig太旧了没有
我尝试创建服务,但即使在重新启动后执行:systemctl enable my_service时,也不会执行我的服务。手动systemctl启动我的\u服务工作
但更奇怪的是,服务启动是因为当我编写systemctl list unit files–type=service时,我看到我的iptablesvpn.
我准备了一个脚本,可以检查显示上次创建的文件
文件搜索=find/var/lib/occas/domains/domain1/servers/traffic-1/logs/-name“traffic-1.log*”2>/dev/null | sort-n | tail-1 | cut-f2-d”“
grep“事件:调用:“$file_to_search | awk'BEGIN{FS=“>”};{print$1}'| sort | uniq-ic>>/home/appuser/scripts/Tr
我有一个包含很多下划线的文件,我必须用空字符串替换所有下划线,除了那些属于特定字符串usr_mstr的下划线。
我试过sed命令,它会替换下划线并排除我提供的单词,但它也会替换紧跟在下划线后面的字符!任何帮助都将不胜感激
echo "fname_sname_id_usr_mstr" | sed 's/_[^usr_mstr]//g'
预期产出:
fnamesnameidusr_mstr
实际产量:
fnamenamedusr_mstr
(s和i被替换)[^usr\u mstr]是一个字符类
我正在尝试通过Ansible使用脚本安装pacaur:
curl -s https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/pacaur_install.sh | bash
用ansible命令
ansible 192.168.1.2 -m shell -a "curl -s https://gist.githubusercontent.com/Tadly/0e65d30f279a34c33e9b/raw/paca
我有一段话:
#!/bin/bash
parent=/parent
newfolder=/newfolder
mkdir "$newfolder"
for folder in "$parent"/*; do
if [[ -d $folder ]]; then
foldername="${folder##*/}"
for file in "$parent"/"$foldername"/*; do
filename="${file##*/}"
newfilename="$foldername"_"$
我有一个名为p.txt的文件。
它包含以下值:
201601
201602
201603
201604
201605
201606
201607
201608
201609
201610
我想一批一批地读这些记录。即
一个变量将有以下三个值
201601
201602
201603
在第一次迭代中。在第二次迭代中,它将有接下来的三行
201604
201605
201606
若数字并没有被3完全除掉,那个么迭代将被除掉+1
在unix中如何实现这一点
到目前为止,我所尝试的:
PERD=
我想编写shell脚本,它允许我执行以下操作:
#!/bin/sh
if ( when "pbpaste" command has been launched by user )
then
do something
fi
用您自己的版本替换pbpaste,该版本首先执行某些操作,然后调用原始pbpaste。是否希望运行if语句以响应用户每次运行的pbpaste,还是仅在pbpaste进程正在运行时才运行?可能重复的
我试图在一段视频的开头插入13秒的黑色视频,该视频使用ffmpeg播放声音,如下所示:
ffmpeg -f lavfi -i "color=c=black:s=720x406:r=25:sar=1/1" -i input.mp4 -filter_complex \
"[0:v] trim=end=13,setpts=PTS-STARTPTS [blackstart]; \
[blackstart] [1:v] concat=n=2:v=1:a=0[out]" \
-map "[out]" -c
我有一个满是文件的文件夹,其中:
ls*101*| grep-v“放弃”
给我这个:
test101v1.nc
test101v2.nc
test101v3.nc
现在,我需要连接这些文件,通常我可以使用以下方法:
ncrcat test101v1.nc test101v2.nc test101v3.nc out.nc
如何在shell脚本中使用xargs
我可以使用for循环,但我想知道是否可以用更智能的方法来实现它?尝试类似于ls*101*| grep“discard”| xargs n
我同时运行几个不同的perl脚本。它们都使用相同的文本文件作为输入(textfile.txt)。有没有一种方法可以让我只写一次文件名而不是写几次
$ perl myscript1.pl textfile.txt & perl myscript2.pl textfile.txt &
perl myscript3.pl textfile.txt & perl myscript4.pl textfile.txt &
perl myscript5.pl textfil
我正在尝试使用awk从文件中过滤数据。现在,对于单个值,我使用如下命令
hadoop fs -text file:///a/b/filename.snappy awk -F'|' '$11 == 655' > filter_20180705.txt
我想在比较部分传递一个值列表,而不是传递$11==655,我想在(列表)中传递一个类似$11的列表。对此有任何想法都会有帮助
样本数据:
karthick,bangalore,software,it,bfsi,spark,hadoop,b
这是一个刮痧的大杂烩
当我尝试剥去一个网站的外壳时,例如:
scrapy shell https://shop.coles.com.au/a/a-vic-metro-oakleigh/product/gasmate-cartridge-butane
我收到以下信息:
...
[scrapy.core.engine] INFO: Spider opened
[scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://s
我需要读取input.txt中的行并忽略以“>”开头的行,然后读取下一行并使用web工具以fasta格式获取输出。我已经编写了代码,但到目前为止无法忽略'>'行,并且希望以一种更简单的方式更改行的名称,例如给定的示例(output_1.fasta)
$i=0;
当读取行时:
if line:do curl-s-d“dna_sequence=“$line”&output_format=fasta”https://web.expasy.org/cgi-bin/translate/dna2aa.cgi
我有一个csv文件,如下所示
a,123,xyz
a,345,zyx
b,123,xyz
b,345,zyx
a,123,xyz
345,zyx
b,123,xyz
345,zyx
我想合并行中具有相同值的第一列。如下
a,123,xyz
a,345,zyx
b,123,xyz
b,345,zyx
a,123,xyz
345,zyx
b,123,xyz
345,zyx
我已对文件进行了排序,并尝试计算值,但无法继续在shell脚本中执行所需的操作。您可以使用以下awk代码
我有以下数据文件,其中的值累积到某个点(直到第1行>第2行):
我希望打印所有单个值,而不考虑未定义的值(即-999)
我的愿望是:
ofile.txt
6
1
3
24
-999
-999
0
2
2
4
4
0
-999
-999
-999
-999
12
1
2
我正在使用awk'{(如果$1!=-999&&[$1]>=[$2]),printf“%s\n”,在awk$1,$2。。。表示不同的列,而不是不同的行
考虑使用额外变量p跟踪上一个值,以反转累积值
awk '
# Save
我有一个矩阵:
$cat ifile.txt
2 3 4 5 10 0 2 2 0 1 0 0 0 1
0 3 4 6 2 0 2 0 0 0 0 1 2 3
0 0 0 2 3 0 3 0 3 1 2 3 1 0
此处共有14列,例如A1 B1 A2 B2 A3 B3 A4 B4 A5 B5 A6 B6 A7 B7。每个奇数列对应于A,偶数列对应于B
我想在一列中打印所有A,在一列中打印所有B。因此,我的愿望文件如
我正在写一个crontab脚本,它将在每个星期六每15分钟运行一次。其思想是验证外部api状态=成功与否。如果它成功了,那么这一天的工作就不应该再触发了。
现在我正在尝试递归,但我认为这不是最好的解决方案。
是否有其他解决方案来实现这一点?我正在使用Shell脚本调用api
以下是现有的代码段:
Cronjob:
*/15 * * * 6 validate.sh
脚本:
status='curl -X GET "api"'
if [[ $status == &quo