我听说printf比echo. 根据我的经验,我只能回忆起一个我不得不使用的实例,printf因为它echo无法将一些文本输入到 RHEL 5.8 上的某个程序中,但printf确实如此。但显然,还有其他差异,我想询问它们是什么以及是否有特定情况下何时使用一种与另一种。
我正在尝试使用 i2c 总线将我的 rasberry Pi 连接到某些显示器。首先,我想手动写入内容,特别是字节到文件。 如何将特定字节写入文件? 我已经读过那个,我认为我的问题应该通过这样的方式解决
echo -n -e \x66\x6f\x6f > byteFileForNow
Run Code Online (Sandbox Code Playgroud)
然而,当我打开了纳米该文件,而不是富我看到:
x66x6fx6f
所以反斜杠被转义了,而不是字节本身。这次我也只在没有-e 的情况下尝试了相同的方法,所以我本来希望看到\x66\x6f\x6f,但结果和以前一样。
因此,echo 正在转义反斜杠、单独的反斜杠和反斜杠,而不管它是否应该这样做。
知道如何解决这个问题吗?
根据应该已经完成我正在寻找的手册页。
我vim在 Ubuntu 上使用打开了一个文件,屏幕底部显示以下内容:
"file.py" [noeol] 553L, 16620C
Run Code Online (Sandbox Code Playgroud)
是什么noeol指示?
我有一个名为的文件/tmp/urlFile,其中每行代表一个 url。我正在尝试从文件中读取如下内容:
cat "/tmp/urlFile" | while read url
do
echo $url
done
Run Code Online (Sandbox Code Playgroud)
如果最后一行不以换行符结尾,则不会读取该行。我想知道为什么?
是否可以读取所有行,无论它们是否以新行结束?
我有一堆.text文件,其中大部分以标准 nl 结尾。
一对夫妇最后没有任何终结者。最后一个物理字节(通常)是一个字母数字字符。
我正在使用cat *.text >| /tmp/joined.text,但随后注意到joined.text 中的几个地方,其中文件的第一行出现在前一个文件的最后一行的末尾。检查前一个文件,我看到没有行终止符——连接解释。
这就提出了一个问题,什么是最简单的连接方法,坚持缺少的换行符?这些选项呢?
我在当前目录的子目录中有文件,最后可能有也可能没有新行;如何找到最后没有换行符的文件?
我试过这个:
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.
我遇到了这个 sed 命令,但我不知道它在做什么。我知道它正在使用 就地更改文件-i,它正在使用脚本-e并且脚本是$a\,但是这个脚本在做什么?
sed -i -e '$a\' filename
Run Code Online (Sandbox Code Playgroud) 如果您打开一个文件,vim并且该文件EOL的最后一行末尾没有,那么编辑器会将其报告为[noeol]. 在打开它之前如何确定这一点vim?(有没有我可以发出的命令来确定这一点?)
我正在尝试替换模式并清理包含多个单词的文件以每行获取一个单词。
结果是使用此命令行实现的:
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 功能来减少表达。
问候
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) 我有一堆 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。
我在使用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)
我检查了文件,没有多余的空格或字符。但是,当我从字符串的后面手动删除时,我什至看不到一个字符。它工作正常。我想一定有某种我看不到的“隐藏”字符或线条。
它一直困扰着我,因为我有大量的文件要连接。我不能手动做同样的事情。
任何帮助表示赞赏。
有时我是否应该在配置文件的最后一行后添加换行符,尤其是如果它是单行配置文件,如主机名文件。
没关系,还是有规律可循?