小编gle*_*man的帖子

perl中字段分隔符的变量

在awk中我可以写: awk -F: 'BEGIN {OFS = FS} ...'

在Perl中,相当于FS什么?我想写

perl -F: -lane 'BEGIN {$, = [what?]} ...'
Run Code Online (Sandbox Code Playgroud)

用一个例子更新:

echo a:b:c:d | awk -F: 'BEGIN {OFS = FS} {$2 = 42; print}'
echo a:b:c:d | perl -F: -ane 'BEGIN {$, = ":"} $F[1] = 42; print @F'
Run Code Online (Sandbox Code Playgroud)

两个输出 a:42:c:d

我宁愿不在:Perl BEGIN块中进行硬编码,也可以参考-F选项保存其参数的位置.

perl awk

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

如何在别名中的awk命令中转义字段变量?

以下是文件的内容:

one two three
four five six
Run Code Online (Sandbox Code Playgroud)

这是我的别名

alias testawk "awk '{print $2}' file"
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

> testawk
one two three
four five six
Run Code Online (Sandbox Code Playgroud)

但是当我发出这个命令时,我得到了我想要的东西:

> awk '{print $2}' file
two
five
Run Code Online (Sandbox Code Playgroud)

如何转义别名中的字段说明符?注意:我正在使用csh

csh escaping

8
推荐指数
1
解决办法
4764
查看次数

在bash -o vi模式中是否有一种方法可以让提示符指示正常/命令模式等

我总是在bash中使用vi模式.如果我处于命令模式或插入模式,那么直观地看是非常有用的.

例如,当我想要搜索历史记录时,/my_search在我按下之前键入任一模式看起来都是一样的Enter,到那时为时已晚.我发现自己压力Esc远远超过必要,只是为了确保我处于正确的模式......

vim bash

8
推荐指数
1
解决办法
973
查看次数

如何在鱼壳的字符串中换行?

与如何在 sh 的字符串中添加换行符是同样的问题 ? 但在鱼壳里。

在 bash 中我们有:

$'this is line\nthis is another line'

谁产生了预期的结果,但在鱼中这不起作用。

鱼有类似的方法吗?

编辑1:

faho 明智地提到了字面方法:

'this is line this is another line'

\n但我真的很好奇是否存在像 shell 中那样保留换行符引用的方法。

我想知道是否可以使用这个字符串"this is a line\nthis is another line"来确保鱼将其视为\n换行符而不是文字。

string line-breaks fish

8
推荐指数
1
解决办法
5642
查看次数

gawk FS将记录分成单个字符

如果字段分隔符是空字符串,则每个字符将成为单独的字段

$ echo hello | awk -F '' -v OFS=, '{$1 = NF OFS $1} 1'
5,h,e,l,l,o
Run Code Online (Sandbox Code Playgroud)

但是,如果FS是可能匹配零次的正则表达式,则不会发生相同的行为:

$ echo hello | awk -F ' *' -v OFS=, '{$1 = NF OFS $1} 1'
1,hello
Run Code Online (Sandbox Code Playgroud)

谁知道为什么会这样?我在gawk手册中找不到任何东西.是否FS=""只是一个特例?

我最感兴趣的是理解为什么第二种情况不会将记录分成更多的字段.就好像awk FS=" *"一样对待FS=" +"

awk gawk

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

如何从bash shell脚本中的一行中提取一个单词

我想从bash脚本中的句子中提取一个单词.它使用昏迷和空格作为分隔符.

ex:- date=crossed 122 name=foo , userid=234567 , sessionid=2233445axdfg5209  associd=2
Run Code Online (Sandbox Code Playgroud)

我有上面的句子,其中有趣的部分是name = foo.键名总是相同但字符串foo可能会有所不同.其他参数也可能存在,也可能不存在.

我需要提取上面的键值对.所以输出将是:

name=foo
Run Code Online (Sandbox Code Playgroud)

在shell脚本中执行此操作的最佳方法是什么?

谢谢!

bash

6
推荐指数
2
解决办法
3万
查看次数

不同工具的正则表达式语法之间有什么区别?

不同的工具以不同的方式实现 例如,匹配"foo"或"bar":

printf "%s\n" foo bar baz food | grep -o '\<\(fo\+\|bar\)\>'
printf "%s\n" foo bar baz food | awk '/\<(fo+|bar)\>/'
printf "%s\n" foo bar baz food | sed -n '/\<\(fo\+\|bar\)\>/p'
printf "%s\n" foo bar baz food | sed -nr '/\<(fo+|bar)\>/p'
Run Code Online (Sandbox Code Playgroud)

这些差异记录在哪里?

regex awk grep gnu sed

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

Bash:如何捕获set -e,但不退出

我的脚本有第一条指令:

set -e
Run Code Online (Sandbox Code Playgroud)

因此,无论何时发生错误,脚本都会中止.我想捕获这种情况以显示信息消息,但我不想在脚本退出时显示该消息; 只有当设置-e触发堕胎时.有可能陷入这种情况吗?

这个:

set -e

function mytrap {
    echo "Abnormal termination!"
}

trap mytrap EXIT

error

echo "Normal termination"
Run Code Online (Sandbox Code Playgroud)

在任何出口调用(无论是否发生错误),这不是我想要的.

bash exit-code

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

如何在监视模式下将 jq 过滤器应用于 kubectl 输出?

我想过滤在 modekubectl下运行的命令的输出--watch,以密切关注某个 k8s 注释的更改。我正在使用以下命令:

kubectl get pod my-pod --watch -o json | jq '.metadata.annotations["my-annotation"]'

问题是 - 在我停止命令之前不会打印任何内容。我希望jq处理输入并在my-pod发生更改时打印它。

我尝试使用该--unbuffered标志,但没有解决问题。

jq kubernetes kubectl

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

如何在 command_not_found_handle 中更改当前工作目录

我正在尝试在 Bash 中编写一个未找到的句柄,它执行以下操作:

  1. 如果 $1 存在并且它是一个目录,则cd进入它。
  2. 如果 $1 存在于用户定义的目录中$DEV_DIR,`cd 进入它。
  3. 如果前面的条件不适用,则失败。

现在我有这样的事情:

export DEV_DIR=/Users/federico/programacion/

function command_not_found_handle () {
    if [ -d $1 ]; then          # the dir exists in '.'
        cd $1
    else
        to=$DEV_DIR$1
        if [ -d $to ]; then
            cd $to
            echo `pwd`
        else
            echo "${1}: command not found"
        fi
    fi
}
Run Code Online (Sandbox Code Playgroud)

尽管它似乎在工作(该echo pwd命令打印了预期的目录),但实际 shell 中的目录并没有改变。

我的印象是,因为这是我.bashrc的 shell 中的一个函数,所以我不会分叉,我可以这样做,cd但显然这不起作用。任何有关如何解决此问题的提示将不胜感激。

bash shell sh bash4

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

标签 统计

bash ×4

awk ×3

bash4 ×1

csh ×1

escaping ×1

exit-code ×1

fish ×1

gawk ×1

gnu ×1

grep ×1

jq ×1

kubectl ×1

kubernetes ×1

line-breaks ×1

perl ×1

regex ×1

sed ×1

sh ×1

shell ×1

string ×1

vim ×1