Articles of bash

如何比较bash中的两个范围列表?

使用bash脚本(Ubuntu 16.04),我试图比较两个范围列表:file1中的任何范围中的任何数字是否与file2中的任何范围中的任何数字一致? 如果是,则在第二个文件中打印行。 在这里,我将每个范围设置为2个制表符分隔的列(在file1中,行1代表范围1-4,即1,2,3,4)。 真正的文件是相当大的。 文件1: 1 4 5 7 8 11 12 15 文件2: 3 4 8 13 20 24 期望的输出: 3 4 8 13 我最好的尝试是: awk 'NR=FNR { x[$1] = $1+0; y[$2] = $2+0; next}; {for (i in x) {if (x[i] > $1+0); then {for (i in y) {if (y[i] <$2+0); then {print […]

基于文件系统中的位置的Shell提示符

我必须在根文件系统下的三个主目录下工作 – home / username,project和scratch。 我想我的shell提示符显示我在哪些顶级目录。 这是我正在做的事情: top_level_dir () { if [[ "${PWD}" == *home* ]] then echo "home"; elif [[ "${PWD}" == *scratch* ]] then echo "scratch"; elif [[ "${PWD}" == *project* ]] then echo "project"; fi } 然后,我将PS1导出为: export PS1='$(top_level_dir) : ' 不幸的是,这不是我想要的。 我home :为我的提示,当我在我的家目录,但如果我切换到草稿或项目,然后提示不会改变。 我不明白bash脚本很好,所以我将不胜感激任何帮助来纠正我的代码。

为什么期望让过程打开它的STDERR?

我想为一个进程设置超时,这是我的shell。 我使用期望来做到这一点,以避免其他软件包的依赖。 test.sh #!/bin/bash # $1 timeout in seconds # $2 command timeout() { time=$1 shift # start the command in a subshell to avoid problem with pipes # (spawn accepts one command) -noecho command="/bin/sh -c \"$*\"" expect -c "set echo \"-noecho\";set timeout $time; spawn -noecho $command; expect timeout { exit 1 } eof { […]

Bash脚本来读取文件

不知道为什么最后一行不切“从脚本: #!/bin/bash FILENAME=$1 while read line do cut -d '"' -f2 echo $line done < $FILENAME $ cat file "1" test "2" test "3" test "4" test "5" test 如果我用下面的命令运行这个脚本: $ ./test file 2 3 4 5 "1" test

如何从Bash中的string中删除重复的字符?

我有一个string cabbagee 我想删除重复的字符。 如果我使用tr -s,它将删除序列中的重复字符。 但是我的期望输出是 cabge 感谢任何人都可以帮助我。 提供的答案是正确的,但我不能使用awk,所以我用: #!/usr/bin/bash key=$1 len=${#key} mkey="" for (( c=0; c<len; c++ )) do tmp=${key:$c:1} echo $mkey | grep $tmp >/dev/null 2>&1 if [ "$?" -eq "0" ]; then echo "Found $tmp in $mkey" else mkey+=$tmp fi done echo $mkey

networking掩码validation似乎不工作在bash脚本中使用正则expression式,而IPvalidation工作正常

我写了一个简单的脚本来validationIP地址和networking掩码如下 #!/bin/bash validFormatIP() { echo $1 | grep -w -E -o '^(25[0-4]|2[0-4][0-9]|1[0-9][0-9]|[1]?[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' > /dev/null if [ $? -eq 0 ] then echo "Valid ipaddress" else echo "Inalid ipaddress" fi } validNetMask() { echo $1 | grep -w -E -o '^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)' > /dev/null if [ $? -eq 0 ] then echo "Valid netmask" else echo "Invalid […]

有没有办法看到一个path的所有中间目录的权限..?

我有一个文件path..是否有任何单一的命令来查看path中的所有中间目录的文件/目录权限..?

Linuxpipe道(convert – > pdf2ps – > lp)

好的,我可以打印一个PDF文件, pdf2ps file.pdf – | lp -s 但是现在我想用convert来合并几个PDF文件,我可以这样做: convert file1.pdf file2.pdf merged.pdf 它将file1.pdf和file2.pdf合并到merged.pdf中 ,target可以replace为' – '。 题 我怎么可以pipe转换成pdf2ps ,然后再转换为lp ?

如何recursion删除具有不同扩展名的多个文件?

我正试图编写一个命令,从当前目录及其所有相关的子目录recursion地删除具有不同扩展名(* .extension1,* .extension2等)的几个文件。 到目前为止,我从另一篇文章中得到了这个命令,但是我不能在同一个命令行中修改多个文件。 find . -name "*.extension1" -type f -delete 是否如下简单? find . -name "*.extension1";"*.extension2" -type f -delete 正如一个侧面说明 ,这些都是我不需要的输出文件,但不是所有的都必须始终输出,所以一些扩展可能不存在。 这只是一般的清理命令。

在vim中显示所有不可见的字符

我知道关于这个在stackoverflow上有一些线程,但是当我在编辑器中编写“:set list”时,它似乎显示隐藏的字符,但它不会在我们遇到问题的代码中显示隐藏的字符。 有些时候,我们的代码中有一些不可见的符号,如果循环中断,我不知道符号如何到达那里,除了一些奇怪的键盘组合很多被意外键入。代码本身看起来是正确的,但看不见的符号打破。 我已经在网上search这个,但所有我能find似乎是在VIM的“:设置列表”命令,除了必须改变隐藏的字符的颜色,但虽然这似乎显示一些隐藏的字符,它不会显示问题那些。 我们得到两个象征十字架的符号,一个看起来像手枪。 我们也尝试在崇高的文本中添加“draw_white_space”设置,但是这似乎只是显示,好吧,像这样的空白,但结果显示在谷歌显示隐藏字符,所以我试了一下。 通过DiffMerge工具,我们能够看到符号的位置的唯一方法是在其他编辑器中看不到这些符号,但是我们实际上已经能够将符号复制到它自己的文件中,并且通过所有的grep带有-f grep选项的文件可以工作,但是在vim中显示字符比使用键绑定更容易。 有人有什么build议吗? 当问题是一个不可见的符号时,这导致我们使用更多的时间来debugging代码。