小编enh*_*nic的帖子

如何使用shell命令从文件中删除一列或多列?

输入:

ARCHIVE  B1_NAME  B2_NAME  B3_NAME  ELEMENT  INFO_NAM WERT PROCID
-------- -------- -------- -------- -------- -------- ---- ------
15MinAvg AIRSS    33-GIS   DMDMGIS1 I        MvAvr15m 1123  CP
15MinAvg AIRSS    33-GIS   DMDMGIS1 P        MvAvr15m 2344  CP
15MinAvg AIRSS    33-GIS   DMDMGIS1 Q        MvAvr15m 4545  CP
15MinAvg AIRSS    33-GIS   DMDMGIS2 I        MvAvr15m 6576  CP
15MinAvg AIRSS    33-GIS   DMDMGIS2 P        MvAvr15m 4355  CP
15MinAvg AIRSS    33-GIS   DMDMGIS2 Q        MvAvr15m 6664  CP
Run Code Online (Sandbox Code Playgroud)

输出:

ARCHIVE  B1_NAME  B2_NAME  B3_NAME  ELEMENT WERT
-------- -------- -------- -------- ------- ----
15MinAvg AIRSS …
Run Code Online (Sandbox Code Playgroud)

shell sed awk shell-script text-processing

25
推荐指数
3
解决办法
18万
查看次数

从 bash 完成中隐藏一些命令?

在 bash 中,假设我有这些命令:

$ pyt[TAB][TAB]
pytest
python
python-config
python-dbg
Run Code Online (Sandbox Code Playgroud)

99% 的情况下,我会选择python. 它是如此恼人的是pytest弹出,并阻止我打字只pyt[TAB][RETURN]调用python。我可以隐藏pytestbash 完成吗?

我的限制:

  1. 我知道我可以删除pytest二进制文件/usr/bin/pytest以防止在 bash 中出现该建议。但是如果我没有 root 访问权限怎么办?如果pytest一个重要的脚本必须存在才能让其他脚本正常工作怎么办?

  2. 即使我可以删除pytest二进制文件(我以前也这样做过),但有时当我升级我的软件时,这个脚本又回来了。

  3. 我知道我可以使用 analias来保存我最喜欢的应用程序的击键(也许只是p为了python)。但我不喜欢这些非标准的缩写。当我远程连接到其他机器时,这让我感到困惑。

那么,有没有办法在 bash 完成中隐藏一些命令?欢迎使用其他 shell(zsh、fish 等)的答案,因为 bash 最近没有加快我的工作流程。

bash autocomplete

10
推荐指数
1
解决办法
1145
查看次数

替换列开头的单引号

我收到超出我控制范围的输入文件,其中某些列中包含前导单引号,例如

'foo|'012|that's nice|bar
Run Code Online (Sandbox Code Playgroud)

我想从每个字段中删除所有前导单引号,以获得预期的输出:

foo|012|that's nice|bar
Run Code Online (Sandbox Code Playgroud)

使用 awk,我假设 gsub 正则表达式元字符像^每列一样工作,但它似乎只在行的开头工作:

$ echo "'foo|'012|that's nice|bar" | awk -F'|' '{gsub(/^'\''/,"")}1'
foo|'012|that's nice|bar
Run Code Online (Sandbox Code Playgroud)

如何从每列中删除前导单引号?

sed awk

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

为什么 -n 出现在我的 bash 测试中 [[ 条件调试输出?

我想测试一个条件是真还是假。这是一个示例 bash 脚本:

#!/bin/bash
set -x
var=foo
if [[ $var==bar ]]
then
        echo $var is bar
else
        echo $var is not bar
fi
set +x
Run Code Online (Sandbox Code Playgroud)

我希望输出为foo is not bar,但我得到以下输出: foo is bar

在查看调试输出时,我注意到正在评估条件-n

+ var=foo
+ [[ -n foo==bar ]]
+ echo foo is bar
foo is bar
+ set +x
Run Code Online (Sandbox Code Playgroud)

Bash Conditional Expressions 手册页上,它说

-n 字符串

如果字符串的长度非零,则为真。

但我对字符串长度是否非零不感兴趣,而是对两个字符串是否相等不感兴趣。

bash test

0
推荐指数
1
解决办法
184
查看次数

标签 统计

awk ×2

bash ×2

sed ×2

autocomplete ×1

shell ×1

shell-script ×1

test ×1

text-processing ×1