相关疑难解决方法(0)

为什么 printf 比 echo 好?

我听说printfecho. 根据我的经验,我只能回忆起一个我不得不使用的实例,printf因为它echo无法将一些文本输入到 RHEL 5.8 上的某个程序中,但printf确实如此。但显然,还有其他差异,我想询问它们是什么以及是否有特定情况下何时使用一种与另一种。

echo text-processing printf

635
推荐指数
4
解决办法
27万
查看次数

将字节回显到文件

我正在尝试使用 i2c 总线将我的 rasberry Pi 连接到某些显示器。首先,我想手动写入内容,特别是字节到文件。 如何将特定字节写入文件? 我已经读过那个,我认为我的问题应该通过这样的方式解决

echo -n -e \x66\x6f\x6f > byteFileForNow
Run Code Online (Sandbox Code Playgroud)

然而,当我打开了纳米该文件,而不是我看到:

x66x6fx6f

所以反斜杠被转义了,而不是字节本身。这次我也只在没有-e 的情况下尝试了相同的方法,所以我本来希望看到\x66\x6f\x6f,但结果和以前一样。

因此,echo 正在转义反斜杠、单独的反斜杠和反斜杠,而不管它是否应该这样做。
知道如何解决这个问题吗?
根据应该已经完成​​我正在寻找的手册页。

shell character-encoding echo quoting

63
推荐指数
2
解决办法
15万
查看次数

vim 编辑会话底部的 noeol 指示器是什么意思?

vim在 Ubuntu 上使用打开了一个文件,屏幕底部显示以下内容:

"file.py" [noeol] 553L, 16620C
Run Code Online (Sandbox Code Playgroud)

是什么noeol指示?

vim

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

读取可能不以换行符结尾的面向行的文件

我有一个名为的文件/tmp/urlFile,其中每行代表一个 url。我正在尝试从文件中读取如下内容:

cat "/tmp/urlFile" | while read url
do
    echo $url
done
Run Code Online (Sandbox Code Playgroud)

如果最后一行不以换行符结尾,则不会读取该行。我想知道为什么?

是否可以读取所有行,无论它们是否以新行结束?

shell bash text-processing newlines

22
推荐指数
4
解决办法
2万
查看次数

如何将文件放在一起,在某些文件的末尾添加缺少的换行符

我有一堆.text文件,其中大部分以标准 nl 结尾。

一对夫妇最后没有任何终结者。最后一个物理字节(通常)是一个字母数字字符。

我正在使用cat *.text >| /tmp/joined.text,但随后注意到joined.text 中的几个地方,其中文件的第一行出现在前一个文件的最后一行的末尾。检查前一个文件,我看到没有行终止符——连接解释。

这就提出了一个问题,什么是最简单的连接方法,坚持缺少的换行符?这些选项呢?

  1. 一种可能有效地向某些输入文件添加空行的解决方案。对我来说,这不是问题,因为joined.text 的处理可以处理它。
  2. 仅将 cr/fl 添加到尚未以这种方式结束的文件的解决方案。

shell text-processing cat newlines

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

如何找到最后没有空行的文件?

我在当前目录的子目录中有文件,最后可能有也可能没有新行;如何找到最后没有换行符的文件?

我试过这个:

find . -name '*.styl' | while read file; do
    awk 'END{print}' $file | grep -E '^$' > /dev/null || echo $file;
done
Run Code Online (Sandbox Code Playgroud)

但它不起作用。 awk 'END{print}' $file在空的新行之前打印该行,与tail -n 1 $file.

search files newlines

12
推荐指数
2
解决办法
3740
查看次数

这个 sed 对脚本“$a\”做了什么?

我遇到了这个 sed 命令,但我不知道它在做什么。我知道它正在使用 就地更改文件-i,它正在使用脚本-e并且脚本是$a\,但是这个脚本在做什么?

sed -i -e '$a\' filename
Run Code Online (Sandbox Code Playgroud)

sed

7
推荐指数
2
解决办法
573
查看次数

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

使用sed,如何格式化每行一个单词,去除空格

我正在尝试替换模式并清理包含多个单词的文件以每行获取一个单词。

结果是使用此命令行实现的:

sed -e '/^[[:space:]]*$/ d' \             # remove empty line
    -e 's/^[[:space:]]*//' \              # remove white space at the beginning
    -e 's/[[:space:]]*$//' \              # remove white space at the ending (EOL)
    -e 's/[[:space:]][[:space:]]*/\n/g' \ # convert blanks between words to newline
    -e '$a\'                              # add a newline if missing at EOF
    -e .....                              # replace other patterns.
Run Code Online (Sandbox Code Playgroud)

(最后一个表达式在How to add a newline to the end of a file? 中找到了?

这个想法是只用一个小的 sed 程序来处理文件(例如,替换一些模式)并同时格式化文件。

我确信可以使用其他 sed 功能来减少表达。

问候

sed text-processing

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

有没有办法计算文件中的文本行数,包括非分隔行?

POSIXwc命令计算文件中有多少 POSIX 行。POSIX 标准将一行定义为带有后缀的文本字符串\n。没有\n,纯文本字符串不能称为一行。

但对我来说,计算文件中有多少行文本字符串更自然。有没有简单的方法来做到这一点?

root:[~]# printf "aa\nbb" | wc -l
1
root:[~]# printf "aa\nbb\n" | wc -l
2
root:[~]#
Run Code Online (Sandbox Code Playgroud)

newlines wc line

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

将 DOS 文本文件转换为 Unix

我有一堆 DOS 格式的 PHP 脚本(vi显示[noeol] [dos]在状态行中),但正如预期的那样,它们不可用。

我跑过dos2unix它们来修复行尾:

dos2unix index.php
Run Code Online (Sandbox Code Playgroud)

但是当我打开文件时,vi我仍然[noeol]在状态行上看到。

在 vi 的十六进制编辑器模式 ( :%!xxd) 中检查它们时,我没有看到任何跳出我的东西。

在原始文件中,行尾如下所示: 0x0D 0x0A

如果在运行后dos2unix它们看起来像:0x0A

我还检查以确保文件的最后一行有一个正确的行尾,并且也在那里 ( 0x0A)。

还有什么可能导致这种情况,我应该担心吗?

我正在运行 CentOS 5.6 x64。

centos text-processing

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

无法从另一个文件的字符串下的文件中提取字符串

我在使用cat命令连接文件时遇到了一个奇怪的问题。我有两个文件,每个文件都有一个字符串:

文件 1:

ABC
Run Code Online (Sandbox Code Playgroud)

文件2:

DEF
Run Code Online (Sandbox Code Playgroud)

要么我做,cat file1 file2要么我做cat file1 >> file2。我希望输出如下所示:

ABC  
DEF
Run Code Online (Sandbox Code Playgroud)

但是,我有这样一个有趣的输出:

ABCDEF
Run Code Online (Sandbox Code Playgroud)

我检查了文件,没有多余的空格或字符。但是,当我从字符串的后面手动删除时,我什至看不到一个字符。它工作正常。我想一定有某种我看不到的“隐藏”字符或线条。

它一直困扰着我,因为我有大量的文件要连接。我不能手动做同样的事情。

任何帮助表示赞赏。

cat newlines

3
推荐指数
1
解决办法
636
查看次数

配置文件的最后一行后面应该有一个换行符吗?

有时我是否应该在配置文件的最后一行后添加换行符,尤其是如果它是单行配置文件,如主机名文件。

没关系,还是有规律可循?

configuration

2
推荐指数
1
解决办法
758
查看次数