小编use*_*082的帖子

壳牌:“显示所有 2588 种可能性?”

所以,我正在移动我的笔记本电脑(我有在键盘上设置东西的坏习惯......),我醒来发现这一点:

$
显示所有 2588 种可能性?(y 或 n)

什么命令会显示这样的东西?

我正在使用 Bash。

shell bash

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

什么命令将提供制表符分隔的文本文件并将每行剪切为 80 个字符?

我有(有时)制表符分隔数据的多行文本文件。我想输出文件以便我可以浏览它 - 所以我只想看到每行的前 80 个字符(我设计的文本文件将重要的内容放在每一行的前面)。

我以为我可以使用 cat 读取文件的每一行,并将每一行发送到管道中的下一个命令:

cat tabfile | cut -c -80
Run Code Online (Sandbox Code Playgroud)

但这似乎坏了。我试着四处游荡,grep 似乎工作 - 但后来我发现,不,它没有(不是文件中的每一行都有 80 多个字符) - 似乎制表符被视为单个字符。

我试过:

cat tabfile | tr \t \040 | cut -c -80
Run Code Online (Sandbox Code Playgroud)

尽管这会通过消除空白可读性来稍微破坏我的数据。但这没有用。也没有:

cat tabfile | tr \011 \040 | cut -c -80
Run Code Online (Sandbox Code Playgroud)

也许我使用 tr 错了?我之前遇到过 tr 问题,想删除多个空格(似乎我在这台机器上可以访问的 tr 版本有一个 -s 选项来压缩多个字符 - 我可能需要更多地使用它)

我敢肯定,如果我搞砸了,我可以使用 perl、awk 或 sed 或其他方法来做到这一点。

但是,我想要一个使用(POSIX?)常规命令的解决方案,以便它尽可能具有可移植性。如果我最终使用 tr,我可能最终会尝试将制表符转换为字符,也许会进行计算,削减计算,然后将这些字符重新转换为制表符以进行输出。

它不需要是一行/直接在命令行上输入 - 脚本就可以了。


有关选项卡文件的更多信息:

我使用制表符来分隔字段,因为有一天我可能想将数据导入其他程序。所以我倾向于在内容之间只有一个标签。但我也使用制表符将内容与垂直列对齐,以在查看纯文本文件时提高可读性。这意味着对于某些文本,我用空格填充内容的末尾,直到我到达选项卡将工作的位置,以将下一个字段与其上方和下方的字段对齐。

DarkTurquoise #00CED1 海洋、天空、划艇自然
MediumSpringGreen #00FA9A 适用于树木魔法  
Lime #00FF00 仅用于春鸡和果蔬$

shell-script text-processing tabulation columns

11
推荐指数
1
解决办法
4221
查看次数

rm -f 的替代选项

我想运行一个命令行:

cd ~/www/tmp/; rm -P 2*
Run Code Online (Sandbox Code Playgroud)

但是如果没有以 2 开头的文件,我会收到错误消息。

你会认为我想使用-f,但是:

-f      Attempt to remove the files without prompting for confirmation, regardless of the file's permissions.  If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.
Run Code Online (Sandbox Code Playgroud)

而且我确实关心文件权限——如果有什么奇怪的事情发生,我更喜欢命令 abort。我只想抑制“不存在”错误。

我查看了其他一些带有“rm 错误”的问题,发现这两个似乎(有点)相关:

按名称删除文件和目录。无此文件或目录

但是,我不明白这个问题的答案中发生的一切,也不知道我需要它吗?

touch这个问题中的黑客建议:

当文件丢失时,rm 没有报告吗?

似乎可行,因为我认为我不介意性能下降(但是您会采用哪种类型的性能下降? - 即:这是一种合理可扩展的技术,还是我只是在学习非常糟糕的习惯?)

我不确定如何if-then在命令行中执行。

对于简单的命令行剪切粘贴清理,还有其他选项吗?

find -delete对我的情况会更好吗?如果是这样,为什么?


有问题的错误:

rm: 2*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

command-line rm

11
推荐指数
1
解决办法
5329
查看次数

如何将环境变量传递给脚本?

好的,我可以从命令行显示一个环境变量:

echo $COLUMNS

并得到回应。

但是我无法从 shell 脚本中执行它,我什么也得不到。因此,必须有一种方法可以导入该环境变量 - 但我找不到简单的解决方案/解释。

曾几何时,我记得看到过类似的东西$ENV_COLUMNS,但那是不正确的(或遗漏了某些东西)。

我正在尝试这样的事情:

    for x in $COLUMNS
     do echo -n "-"
    done
    echo #to get the /n
Run Code Online (Sandbox Code Playgroud)

shell-script environment-variables

9
推荐指数
4
解决办法
3万
查看次数

具有当前终端宽度的环境(?)变量的名称是什么?

我知道这很简单,但我不记得它的位置/名称。

存储终端当前宽度的变量在哪里?

我看到这个答案谈到了改变: 终端长度和宽度如何通过 SSH 和 telnet 转发?

但我想获得当前值,以用于脚本(并且我不了解该答案中的所有内容)。

曾几何时,我记得有某种方法可以显示所有环境变量?(嗯,我看到一个回答说 use set(vs. env),但我set只显示 LINES 而不是宽度?)


然后当然是下一个问题;一旦我有了那个 $number 我想多次重复一个字符( "-" ),以制作一条 X 字符宽的虚线(填充终端,不换行)。如果你有一种优雅的方式,我应该这样做,我也会很感激。

shell shell-script

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