小编Ini*_*ian的帖子

BASH:同时并排显示两个文件

我正在处理一个bash脚本,我想并排打印两个文件.一个文件填充IPv4地址,另一个文件填充IPv6地址.我试过了,

pr -mtw $WIDTH $FILE1 $FILE2
Run Code Online (Sandbox Code Playgroud)

但它削减了产量.

??????IPV4?????????????????????????IPV6??????????????????
 224.0.0.1       2001:0db8:0000:
 192.0.2.128     ff02::1
 192.0.2.128     2001:0db8:0000:
 192.0.2.128     ::
                 2001:0db8:0000:
                 2001:db8:0:0:0:
                 2001:db8::ff00:
                 0000:0000:0000:
                 ::1
                 fe80::
                 ::ffff:192.0.2.
                 ::192.0.2.128
Run Code Online (Sandbox Code Playgroud)

我也试过了,

paste $FILE1 $FILE2  | awk '$1=$1' OFS='\t '
Run Code Online (Sandbox Code Playgroud)

而输出是,

??????IPV4?????????????????????????IPV6??????????????????
224.0.0.1    2001:0db8:0000:0042:0000:8a2e:0370:7334
192.0.2.128  ff02::1
192.0.2.128  2001:0db8:0000:0000:0000:ff00:0042:8329
192.0.2.128  ::
2001:0db8:0000:0000:0000:ff00:0042:8329
2001:db8:0:0:0:ff00:42:8329
2001:db8::ff00:42:8329
0000:0000:0000:0000:0000:0000:0000:0001
::1
fe80::
::ffff:192.0.2.128
::192.0.2.128
Run Code Online (Sandbox Code Playgroud)

我希望输出是这样的,

??????IPV4?????????????????????????IPV6??????????????????
 224.0.0.1       2001:0db8:0000:0042:0000:8a2e:0370:7334
 192.0.2.128     ff02::1
 192.0.2.128     2001:0db8:0000:0000:0000:ff00:0042:8329
 192.0.2.128     ::
                 2001:0db8:0000:0000:0000:ff00:0042:8329
                 2001:db8:0:0:0:ff00:42:8329
                 2001:db8::ff00:42:8329
                 0000:0000:0000:0000:0000:0000:0000:0001
                 ::1
                 fe80::
                 ::ffff:192.0.2.128
                 ::192.0.2.128
Run Code Online (Sandbox Code Playgroud)

FILE1:

 224.0.0.1
 192.0.2.128
 192.0.2.128
 192.0.2.128
Run Code Online (Sandbox Code Playgroud)

FILE2:

 2001:0db8:0000:0042:0000:8a2e:0370:7334
 ff02::1
 2001:0db8:0000:0000:0000:ff00:0042:8329
 ::
 2001:0db8:0000:0000:0000:ff00:0042:8329 …
Run Code Online (Sandbox Code Playgroud)

bash awk text

5
推荐指数
1
解决办法
579
查看次数

在命令结尾处\后的额外字符

当我尝试使用sed在OSX中插入新行时,我收到以下错误

在命令结尾处\后的额外字符

当前文件内容是

{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
Run Code Online (Sandbox Code Playgroud)

预期的内容是

{
'localhost' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
 'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'mobile'],
}
Run Code Online (Sandbox Code Playgroud)

我正在使用的命令是

sed -i '' "/localhost/a\                        'dev.ops' => ['domain_name' => 'default', 'domain_type' => 'web']," FILENAME
Run Code Online (Sandbox Code Playgroud)

macos sed

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

检查进程是否正在运行,如果没有,请使用Cron重新启动它

我用followin代码创建了restart.sh

#!/bin/bash
ps -aux | grep sidekiq > /dev/null
if [ $? -eq 0 ]; then
  echo "Process is running."
else
  echo "Process is not running."
fi
Run Code Online (Sandbox Code Playgroud)

检查sidekiq进程是否正在运行.我将把这个脚本放在cron中每天运行,所以如果sidekiq没有运行,它将自动启动.

我的问题是,与

ps -aux | grep sidekiq
Run Code Online (Sandbox Code Playgroud)

即使进程没有运行,它也会显示出来

myname 27906  0.0  0.0  10432   668 pts/0    S+   22:48   0:00 grep --color=auto sidekiq
Run Code Online (Sandbox Code Playgroud)

而不是没有.这在grep中计算,因此即使进程未运行,它也会显示为"sidekiq"进程正在运行.怎么不算这个结果?我相信我必须使用awk,但我不知道如何在这里使用它来更好地过滤.

unix bash shell cron awk

5
推荐指数
1
解决办法
6767
查看次数

Globs & NPM Minimatch:递归匹配除特定目录之外的所有文件和目录

给定目录结构:

/Users/doge/very/amaze.js
/usr/local/bin/wow
/node_modules/
/css/
/css/somefile.css
/lib/
/somelib/
/anotherlib/somedir/finallib.js
/index.html
/somefile.test
/somelib/file.html
/firstdir/seconddir/file.css
/node_modules.txt
Run Code Online (Sandbox Code Playgroud)

如何使用 extglob 只排除 node_modules 目录?

/!(node_modules)
Run Code Online (Sandbox Code Playgroud)

上面的内容匹配根级别的所有内容,除了 node_modules 目录和文本文件(我们想要包含)之外。它也不会递归地遵循匹配目录。

/!(node_modules)/**
Run Code Online (Sandbox Code Playgroud)

这个更接近,但它也排除了根目录中的所有文件。即使它包含根级别的文件,我猜它也会排除 node_modules.txt 文件。

PS 这是使用grunt-sshminimatch节点模块进行文件匹配。

bash glob node.js minimatch grunt-ssh

5
推荐指数
1
解决办法
2155
查看次数

bash `read -t` 在管道上不起作用

证明这一点的一个非常简单的方法是运行

mkfifo /tmp/a
read -t 1 a < /tmp/a
Run Code Online (Sandbox Code Playgroud)

阅读永远不会返回。

Bash 手册说:此选项仅在 read 从终端、管道或其他特殊文件读取输入时有效;从常规文件读取时无效

但是 /tmp/a 是一个管道, ls 的输出是

ls -l /tmp/a
prw-r--r-- 1 root root 0 Feb  4 22:18 /tmp/a
Run Code Online (Sandbox Code Playgroud)

bash 版本是:

GNU bash,版本 4.3.46(1)-release (x86_64-pc-linux-gnu) 版权所有 (C) 2013 Free Software Foundation, Inc.

操作系统是:

Ubuntu 16.04.1 LTS
Run Code Online (Sandbox Code Playgroud)

linux bash shell

5
推荐指数
1
解决办法
413
查看次数

将IFS设置为空字节不能在命令行中正确分割行

~ ls
A B C
Run Code Online (Sandbox Code Playgroud)

猛击(看起来不对)

~IFS=$'\x00' read -a vars < <(find -type f -print0); echo "${vars}"
ABC
Run Code Online (Sandbox Code Playgroud)

在zsh上(看起来不错)

~IFS=$'\x00' read -A vars < <(find -type f -print0); echo "${vars}"
A B C
Run Code Online (Sandbox Code Playgroud)

它是bash的错误吗?

bash ifs

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

获取“无效的Lambda响应:收到来自Lambda的错误响应:已处理”错误

我收到错误:

An error has occurred: Invalid Lambda Response: Received error response from Lambda: Handled. 
Run Code Online (Sandbox Code Playgroud)

从我的lambda函数的lex中,我正在尝试https://github.com/awslabs/amz-ai-building-better-bots中的代码,

当尝试使用test事件时,Lambda函数将返回下面的预期输出,指示lex引发下一个插槽,但是lex抛出上述错误。

Lambda测试输出:

{
  "sessionAttributes": {},
  "dialogAction": {
    "type": "ElicitSlot",
    "intentName": "cafeOrderBeverageIntent",
    "slots": {
      "BeverageType": "mocha",
      "BeverageStrength": null,
      "Creamer": null,
      "BeverageSize": null,
      "BeverageTemp": null,
      "BeverageExtras": null
    },
    "slotToElicit": "BeverageSize"
  }
}
Run Code Online (Sandbox Code Playgroud)

查看lex开发人员指南,该响应具有输出格式的所有预期字段,

是否也应将“ fulfillmentState”与dialogaction elicitslot一起发送?目前尚未发送。

测试事件输入:

{
  "messageVersion": "1.0",
  "invocationSource": "DialogCodeHook",
  "userId": "test-1",
  "sessionAttributes": {},
  "bot": {
    "name": "CoffeeBot",
    "alias": null,
    "version": "$LATEST"
  },
  "outputDialogMode": "Text",
  "currentIntent": {
    "name": "cafeOrderBeverageIntent",
    "slots": {
      "BeverageType": "mocha", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda aws-lex

5
推荐指数
0
解决办法
295
查看次数

在模式之间的文本文件中对行进行排序

我正在尝试在Bash或Python中的模式之间对线进行排序。我想基于第二个字段以“,”作为分隔符对行进行排序。

给定以下文本输入文件:

Sample1
T1,64,0.65  MEDIUM
T2,60,0.45  LOW
T3,301,0.68  MEDIUM
T4,65,0.75  HIGH
T5,59,0.72  MEDIUM
T6,51,0.82  HIGH
Sample2
T1,153,0.77  HIGH
T2,152,0.61  MEDIUM
T3,154,0.67  MEDIUM
T4,283,0.66  MEDIUM
T5,161,0.65  MEDIUM
Sample3
T1,147,0.71  MEDIUM
T2,154,0.63  MEDIUM
T3,45,0.63  MEDIUM
T4,259,0.77  HIGH
Run Code Online (Sandbox Code Playgroud)

我期望作为输出:

Sample1
T6,51,0.82  HIGH
T5,59,0.72  MEDIUM
T2,60,0.45  LOW
T1,64,0.65  MEDIUM
T4,65,0.75  HIGH
T3,301,0.68  MEDIUM
Sample2
T2,152,0.61  MEDIUM
T1,153,0.77  HIGH
T3,154,0.67  MEDIUM
T5,161,0.65  MEDIUM
T4,283,0.66  MEDIUM
Sample3
T3,45,0.63  MEDIUM
T1,147,0.71  MEDIUM
T2,154,0.63  MEDIUM
T4,259,0.77  HIGH
Run Code Online (Sandbox Code Playgroud)

我试图通过另一篇文章中的glenn jackman来适应这个建议,但据我测试,它仅适用于2种模式:

> gawk -v cmd="sort -k2" p=1 '
>     /^PATTERN2/ …
Run Code Online (Sandbox Code Playgroud)

python awk sed

5
推荐指数
1
解决办法
62
查看次数

从 bash 的输出中删除包含大量可能性的行

我正在尝试过滤一个大 txt 文件(大约 10GB)的行,该文件只在direction列等于时才被呼叫号码的前缀2.

这是我从管道获取的文件格式(来自不同的脚本)

caller_number=34234234324, clear_number=982545345435, direction=1, ...
caller_number=83479234234, clear_number=348347384533, direction=2, ...
Run Code Online (Sandbox Code Playgroud)

因为这只是一个示例数据,但实际文件包含许多其他列,但我只想过滤clear_number基于direction所以这就足够了。

我想删除不包含前缀列表的行,因此例如在这里我将使用 grep 执行以下操作:

grep -vP 'clear_number=(?!(2207891|22034418|22074450|220201677|220240574|220272183|220722988|220723276|220751152|220774457|220794227|220799141|2202000425|2202000939|2202000967)).*direction=2'
Run Code Online (Sandbox Code Playgroud)

这很好用。唯一的问题是我得到的前缀数量有时约为 10K-50K,这是很多前缀,如果我尝试使用grep get来做到这一点grep: regular expression is too large

任何想法如何使用 Bash 命令解决它?

更新

例如..假设我有以下内容:

caller_number=34234234324,     clear_number=982545345435, direction=1
caller_number=83479234234,     clear_number=348347384533, direction=2
caller_number=2342334324,      clear_number=5555345435,   direction=1
caller_number=034082394234324, clear_number=33335345435,  direction=1
caller_number=83479234234,     clear_number=348347384533, direction=2
caller_number=83479234234,     clear_number=444447384533, direction=2
caller_number=83479234234,     clear_number=64237384533, direction=2
Run Code Online (Sandbox Code Playgroud)

我的list.txt包含:

642
3333
534234235
Run Code Online (Sandbox Code Playgroud)

所以它只会返回该行

caller_number=83479234234,     clear_number=64237384533, direction=2
Run Code Online (Sandbox Code Playgroud)

因为清晰的数字以642and direction=开头2 …

awk grep sed

5
推荐指数
3
解决办法
168
查看次数

sed 在 bash 中使用变量取消注释多行

我遇到以下问题:我试图取消注释我确定使用的特定行:

LINESTART=$(grep -nr "matching string" test.conf | cut -d : -f1)
Run Code Online (Sandbox Code Playgroud)

之后我需要取消注释该代码$LINESTART部分$((LINE+10))

LINEEND=$((LINE+10))
Run Code Online (Sandbox Code Playgroud)

我尝试了以下 sed 语法:

sed -i '${LINESTART},${LINEEND} s/# *//' test.conf
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

sed: -e expression #1, char 4: extra characters after command
Run Code Online (Sandbox Code Playgroud)

示例 test.conf:

 84     #server {
 85     #    listen       8000;
 86     #    listen       somename:8080;
 87     #    server_name  somename  alias  another.alias;
 88 
 89     #    location / {
 90     #        root   html;
 91     #        index  index.php index.html index.htm;
 92     #    }
 93     #}
Run Code Online (Sandbox Code Playgroud)

unix linux awk

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

标签 统计

awk ×5

bash ×5

sed ×3

linux ×2

node.js ×2

shell ×2

unix ×2

amazon-web-services ×1

aws-lambda ×1

aws-lex ×1

cron ×1

glob ×1

grep ×1

grunt-ssh ×1

ifs ×1

macos ×1

minimatch ×1

python ×1

text ×1