Bash字符串处理(与Java对照) - 4.字符串输出

Bash字符串处理(与Java对照) - 4.字符串输出

In Java

输出到标准输出设备(控制台、屏幕)

System.out.println(s);

 

输出到标准错误设备(控制台、屏幕)

System.err.println(s);

 

输出到文件

PrintWriter outputStream = new PrintWriter(new FileWriter("output_file.txt"));

try {

    outputStream.println(s);

} finally {  // 别忘记将输出流关闭,否则会造成资源泄漏

    outputStream.close();

}

 

Line-Oriented I/O (来自 http://download.oracle.com/javase/tutorial/essential/io/charstreams.html)

import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;

public class CopyLines {
    public static void main(String[] args) throws IOException {
        BufferedReader inputStream = null;
        PrintWriter outputStream = null;

        try {
            inputStream = 
                new BufferedReader(new FileReader("xanadu.txt"));
            outputStream = 
                new PrintWriter(new FileWriter("characteroutput.txt"));

            String l;
            while ((l = inputStream.readLine()) != null) {
                outputStream.println(l);
            }
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }
}
 

In Bash

echo

关于echo命令,也可以参考“我使用过的Linux命令之echo - 显示文本、打印信息 ”。

 

输出字符串常量

示例:echo Hello

示例:echo "Hello"

 

[root@jfht tmp]# echo Hello
Hello
[root@jfht tmp]# echo "Hello"
Hello
[root@jfht tmp]# echo Hello   World
Hello World
[root@jfht tmp]# echo "Hello   World"
Hello   World
[root@jfht tmp]#

 

 

输出变量

格式1:echo $VAR

格式2:echo ${VAR}

上面的格式,如果变量VAR保存的字符串中包含空格、换行,那么这些空格、跳格、换行将会被压缩掉。

格式3:echo "$VAR"

格式4:echo "${VAR}"

注意,不能用单引号来引用。

 

[root@jfht tmp]# VAR=" Hello    World   "
[root@jfht tmp]# echo $VAR
Hello World
[root@jfht tmp]# echo ${VAR}
Hello World
[root@jfht tmp]# echo "$VAR"
 Hello    World  
[root@jfht tmp]# echo "${VAR}"
 Hello    World  
[root@jfht tmp]# echo '$VAR'
$VAR
[root@jfht tmp]# echo $'$VAR'
$VAR
[root@jfht tmp]#

 

 

注意:echo在输出信息的时候会自动加上换行,

如果不需要换行,加上 -n参数即可

man echo 写道
-n do not output the trailing newline

 

[root@jfht tmp]# echo "Hello"
Hello
[root@jfht tmp]# echo -n "Hello"
Hello[root@jfht tmp]#

 

echo -e 命令参数中的转义字符

man echo 写道
       -e enable interpretation of backslash escapes

       If -e is in effect, the following sequences are recognized:

       \0NNN  the character whose ASCII code is NNN (octal)
       \\     backslash
       \a     alert (BEL)
       \b     backspace
       \c     suppress trailing newline
       \f     form feed
       \n     new line
       \r     carriage return
       \t     horizontal tab
       \v     vertical tab

       NOTE: your shell may have its own version of echo, which usually supersedes the version described here.  Please
       refer to your shell’s documentation for details about the options it supports.
 

\"  双引号 gives the quote its literal meaning
\$  美元符 gives the dollar sign its literal meaning (variable name following \$ will not be referenced)
\\  反斜杠、转义符本身 gives the backslash its literal meaning

\` 反引号

\<newline> 就是\跟上换行,那么换行的作用不再有,只起到续行的作用。

\n  换行 means newline
\r  回车 means return
\t  制表符,跳格 means tab
\v  竖制表符 means vertical tab
\b  退格 means backspace
\a  警报 means alert (beep or flash)
\0xx  八进制表示的ASCII码字符 translates to the octal ASCII equivalent of 0nn, where nn is a string of digits

 

[root@jfht ~]# echo -e '\n'


[root@jfht ~]# echo -e 'a\tb'
a       b
[root@jfht ~]#

 

 

输出命令执行结果

格式1:command line

就是直接执行命令,当然可以

格式2:echo `command line`

格式3:echo $(command line)

这两种格式的执行效果是一样的,都会把命令输出的前后空格去掉、中间的空格换行压缩为一个空格。

格式2:echo "$(command line)"

格式3:echo "`command line`"

这两种格式的执行效果也是一样的,并且会保持命令输出的空格和换行。一般与直接执行命令的输出一致。

 

 

[root@jfht tmp]# ls
ct08  ct08.min.tar.gz  ls0.txt  ls1.txt  ls2.txt
[root@jfht tmp]# echo `ls`
ct08 ct08.min.tar.gz ls0.txt ls1.txt ls2.txt
[root@jfht tmp]# echo $(ls)
ct08 ct08.min.tar.gz ls0.txt ls1.txt ls2.txt
[root@jfht tmp]# echo "`ls`"
ct08
ct08.min.tar.gz
ls0.txt
ls1.txt
ls2.txt
[root@jfht tmp]# echo "$(ls)"
ct08
ct08.min.tar.gz
ls0.txt
ls1.txt
ls2.txt
[root@jfht tmp]#

问题来了:为什么 echo "`ls`" 和 echo "$(ls)" 的输出结果与 直接执行 ls 不一致呢?可以看看下面的解释:

如果标准输出是终端,那么是显示为多列形式的;否则就是一行一列。而对于$(ls)和`ls`,实际上标准输出已经不是终端了。

info ls 写道
By default, the output is sorted alphabetically, according to the
locale settings in effect.(1) If standard output is a terminal, the
output is in columns (sorted vertically) and control characters are
output as question marks; otherwise, the output is listed one per line
and control characters are output as-is.
 

 

输出到文件(标准输出重定向)

覆盖原来的文件

格式:echo "$S" >output.txt

 

追加到文件

格式:echo "$S" >>output.txt

 

[root@jfht tmp]# S=123456789
[root@jfht tmp]# echo "$S" >output.txt 
[root@jfht tmp]# cat output.txt
123456789
[root@jfht tmp]# echo "$S" >output.txt
[root@jfht tmp]# cat output.txt      
123456789
[root@jfht tmp]# echo "$S" >>output.txt
[root@jfht tmp]# cat output.txt       
123456789
123456789
[root@jfht tmp]#

 

输出到标准错误设备

比如用来打印程序的出错信息

echo "$S" >&2

>&2表示把标准输出重定向到文件描述符2,而这正是标准错误输出的文件描述符。

 

[root@jfht tmp]# if ! ls "*"; then echo "error ls" >&2; fi
ls: *: 没有那个文件或目录
error ls
[root@jfht tmp]#

上面命令行的意思是说列出文件名为*的文件,如果出错,就打印错误信息。

 

输出到别的进程

管道线(|)

示例:echo "$S" | wc -c

Advanced Bash-Scripting Guide: Chapter 3. Special Characters 写道
|

pipe. Passes the output (stdout of a previous command to the input (stdin) of the next one, or to the shell. This is a method of chaining commands together.

A pipe, as a classic method of interprocess communication, sends the stdout of one process to the stdin of another. In a typical case, a command, such as cat or echo, pipes a stream of data to a filter, a command that transforms its input for processing.

The output of a command or commands may be piped to a script.
 

Here Document方式

示例:wc -c <<EOF

$S

EOF

Advanced Bash-Scripting Guide: Chapter 19. Here Documents 写道
A here document is a special-purpose code block. It uses a form of I/O redirection to feed a command list to an interactive program or a command, such as ftp, cat, or the ex text editor.

COMMAND <<InputComesFromHERE
...
...
...
InputComesFromHERE

A here document supports parameter and command substitution. It is therefore possible to pass different parameters to the body of the here document, changing its output accordingly.
 

 

Here String方式

示例:wc -c <<<"$S"

Advanced Bash-Scripting Guide: 19.1. Here Strings 写道
A here string can be considered as a stripped-down form of a here document.
It consists of nothing more than COMMAND <<< $WORD,
where $WORD is expanded and fed to the stdin of COMMAND.
 

 

[root@jfht tmp]# S=123456789
[root@jfht tmp]# echo "$S" | wc -c
10
[root@jfht tmp]# wc -c <<<"$S"
10
[root@jfht tmp]# wc -c <<EOF
> $S
> EOF
10
[root@jfht tmp]#

 

格式化输出(printf)

printf "%8s" "$S"

类似C语言的格式化输出,此处不深入探讨。将在本系列的第18节详述。

 

 

本文链接:http://codingstandards.iteye.com/blog/1168164   (转载请注明出处)

返回目录:Java程序员的Bash实用指南系列之字符串处理(目录) 

上节内容:Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值

下节内容:Bash字符串处理(与Java对照) - 5.字符串输入(读取字符串)

 

Qt中输出中文出现乱码(win10系统下) 当我刚开始在win10下使用Qt Creator(4.3.0版本)时,遇到过这么个问题:当程序输出中文时,中文会乱码,程序本身的中文未乱码。 乱码截图如下: 我查阅了很多资料,最后在自己的不断的尝试下,解决了乱码问题。进入主题,具体如何解决乱码? ① 首先,我们先设置一下,可以直观在Qt界面上看到文件的编码方式: 点击工具(tool)->选项(option)->文本编辑器->显示->Diplayfileencoding,将其勾选上,点击apply,即可,截图如下... 阅读详情

相关推荐

C语言入门—初识C语言

一、C语言概述 1、什么是C语言 语言是用来交流沟通的,有一方说,有一方听。必须要两方参与。(自言自语的除外) 语言是人与人交流,而C语言是人与机器交流 语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。 接下来首先了解下计算机的组成: 2、计算机介绍 2.1、计算机结构组成 2.2、计算机系统组成 2.3、程序的指令 指令是对计算机进行程序控制的最小单元 计算机的指令系统是指所有指令的集合 程序是指为完成某一项特定任务而用某种言语编写的一组指令序列 3、C语言发展历程 3.

jun319817的博客 1034

Bash 脚本教程(六)字符串操作

上面两种语法会删除变量字符串开头的匹配部分(将其替换为空),返回剩下的部分。如果匹配成功,就删除匹配的部分,换成其他的字符串返回。如果匹配成功,就删除匹配的部分,返回剩下的部分。如果匹配成功,就删除匹配的部分,返回剩下的部分。上面两种语法都是最长匹配(贪婪匹配)下的替换,区别是前一个语法仅仅替换第一个匹配,后一个语法替换所有匹配。如果省略了string部分,那么就相当于匹配的部分替换成空字符串,即删除匹配的部分。上面例子中,echo命令的-e参数,表示将替换后的字符串的\n字符,解释为换行符。

weixin_45773632的博客 1529

【超详细】数据分析笔试题分享,可以收藏后仔细阅读_数据分析岗位笔试题目

这种做法是最精确的做法,保留了所有的信息,也未添加任何额外信息,若预处理时把所有的变量都这样处理,会大大增加数据的维度。15、在某座城市出现了某种流行病,且已知某座城市男女人数相同,男性患该病的概率为5%,女性为0.25%,现已知该城市的小明得了此病,请问小明为男性的概率是() B。D项,使用方差作为特征评分标准,如果某个特征的取值差异不大,通常认为该特征对区分样本的贡献度不大,因此在构造特征过程中去掉方差小于阈值的特征。LTV,用户生命周期价值,是产品从用户获取到流失所得到的全部收益的总和。

2401_89824744的博客 948

shell脚本学习之echo输出字符串形式

echo有三种形式 输入 $echo hello world $echo 'hello world' $echo "hello world" 对于上述字符串,三者都可以正确输出 hello world 三者各有特点 i 不加引号:用分号隔开时会出问题,因为脚本执行命令时用分号 ; 来隔开多个命令,;后为新一次命令的执行。 输入 $echo hello;world...

Tean 9816

Windows 11 部署 Docker Desktop:从 WSL 报错到服务配置的完整排障实录

本文详细记录了在Windows 11上部署Docker Desktop时遇到的WSL报错问题及完整解决方案。从Hyper-V配置、BIOS设置到系统服务检查,提供了一系列实用命令和排查步骤,帮助开发者快速解决'Unexpecter WSL error'等常见问题,实现Docker与WSL2的稳定运行。

weixin_30687051的博客 120

Multisim 11.0的安装破解汉化步骤

15:打开注册机,选择管理员运行,默认第一项,选择生成文件路径,这里不要随意选择,要找到你安装Multisim安装路径下Shard下的License Manager路径下,否则会报错,破解失败。14:后面会出现一个更新提示,选择否,然后选择重启电脑后,先不要选择重启电脑,在这里出现了问题(可能敲击回车,默认去重启电脑了),所以我说不要重启电脑,重启破解时右下角出现这,点击否。17:重启电脑,如果前面重启过,那可以跳过重启,应用程序下找到下图所示,启动。16:点击确认覆盖,路径下生成了该文件。

qq_53260940的博客 2367

Bash中字符串使用总结

欢迎关注个人公众号 DailyJobOps 原文地址:Bash中字符串使用总结 整理汇总了bash中字符串常见的操作行为。建议收藏,需要的时候方便对比查找。 常见的操作行为包括: 字符串长度、 字符串截取 字符串关键字删除 字符串匹配删除 字符串替换 字符串大小写转化 字符串默认值 具体的操作的Demo详见如下代码 #!/usr/bin/env bash # encoding: utf-8 # Author: colinspace.com # # Demo string demostr=.

Colinspace 2266

暴力破解pdf文档密码

相信小伙伴们都遇到这种情况;你收到了一些标题很吸引人的pdf文档 或者是重要数据泄露 学习资料总结,再或者是某机构的押题密卷,打开pdf却提示你要输入密码 因为不知道密码 只能弃罢。我就遇到过这种情况 网友发来了标题为某天一的押题密卷 ,我也想看看这个卷子的题怎么样,因为被设置了密码 我尝试用6到10位的纯数字组合来暴力破解这个pdf,结果三 四个小时都没找到正确的密码。有些网友为破解这个密码 请某宝某多来破解 也都没有破解成功。

shelter1234567的博客 1万+

shell脚本抽取文本文件中指定字符串的方法:sed+grep方法、awk+grep方法(必要时可以联合sed以及grep)、grep+cut方法

在linux中经常要对一些动态的文本文件抽取指定的字符串,比如执行ps命令后想要获取指定的运行进程(如ps自己)的PID号(同一个进程每次启动的时候pid号是随机分配的)。该怎么办呢?当然,可以用一些截取字符串的方法,这里介绍一下用2种方法来解决这类问题。 一、sed+grep方法: 首先大概了解一下sed,sed是linux里面一个非交互性的文本流编辑器(好长的定义,反正我听起来我很拗口)。

menlinshuangxi的专栏 16万+

16G显存+llama.cpp跑大模型的黄金配置指南

大语言模型(LLM)本地部署的核心瓶颈在于显存与推理效率的平衡。llama.cpp作为轻量级C/C++推理引擎,通过GGUF模型格式、量化压缩(如Q4_K_M)和CUDA底层优化,显著降低GPU资源需求。在消费级硬件中,16G显存成为兼顾模型能力(如Qwen3-4B、Llama-3-8B)、长上下文支持(4K token)与系统稳定性的关键阈值。它既规避了12G显存的容量焦虑,又绕开了24G高端卡的成本与散热负担,特别适合Windows 11原生环境下的生产级AI应用,如RAG、智能客服与文档分析。

weixin_32629853的博客 404

STM32C8T6实战:用PID算法搞定超级电容的10W无线恒功率充电(附代码避坑)

本文详细介绍了如何使用STM32C8T6和PID算法实现超级电容的10W无线恒功率充电。通过优化硬件设计、动态调整PID参数以及三重滤波技术,解决了超级电容充电过程中的功率尖峰和效率问题。附有代码示例和调试经验,帮助开发者快速实现高效稳定的无线充电方案。

weixin_29190169的博客 405

echo -e 下面8进制ASCII code颜色代码

NAME        echo - display a line of text SYNOPSIS        echo [OPTION]... [STRING]... -e     enable interpretation of backslash escapes If -e is in effect, the following sequences are recogniz

Balder~专栏 3850

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了无线充电系统面临的核心挑战,提出LCC补偿网络解决方案,阐述了其恒流输出和输入阻抗解耦原理。通过Simulink分步演示了系统建模过程,包括松耦合变压器、LCC+LC补偿网络、功率变换级搭建以及频率跟踪控制实现。仿真结果表明,LCC补偿系统在气隙变化和负载跳变下能保持输出电压稳定(波动±3%),效率达89%。文章还总结了工程实现要点,并探讨了动态充电、多负载系统等扩展应用。该教程为开发高效智能的无线充电系统提供了实用指导

amy_mhd的博客 62

BASH字符串处理:字符串分割为数组

http://codingstandards.iteye.com/blog/1164910 Bash字符串处理(与Java对照) - 25.字符串分割(成数组) In Java String.split  String[]     split(String regex)           根据给定的正则表达式的匹配来拆分此字符串。  String[]

zouyongjin的专栏 7763

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取

Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取 In Java 字符串替换  String     replace(char oldChar, char newChar)           返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。  String     replace(CharSe...

巨人站在肩膀上 633

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java 字符串截取替换_Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取...

Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取In Java字符串替换?String ??? replace(char oldChar, char newChar)????????? 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。?String ??? replace(CharSequence target, C...

weixin_39601641的博客 168

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较)...

Bash字符串处理(与Java对照) - 11.比较两个字符串大小(字典顺序、数值比较) In Java String.compareTo int     compareTo(String anotherString)           按字典顺序比较两个字符串。如果返回0,表示相等;&lt;0表示小于;&gt;0 表示大于。   int     compareToIgnor...

巨人站在肩膀上 806

Bash字符串处理(与Java对照) - 8.计算字符串长度

Bash字符串处理(与Java对照) - 8.计算字符串长度 In Java 取字符数量 一个汉字算1个字符。 int len = s.length();   JavaDoc class String 写道 public int length() Returns the length of this string. The length is equal to ...

巨人站在肩膀上 312

Bash字符串处理(与Java对照) - 5.字符串输入(读取字符串)

Bash字符串处理(与Java对照) - 5.字符串输入(读取字符串) In Java Scanner类:Scanner.hasNext() &amp; Scanner.next() &amp; Scanner.hasNextLine() &amp; Scanner.nextLine() JavaDoc class Scanner 写道 A simple text scanner whic...

巨人站在肩膀上 235

Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值

Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值 In Java 简单赋值情况 s = "Hello";   一次给多个变量赋值的情况 s1 = s2 = "Same";   赋值为整数(将整数转换为字符串) int i = 1234; s = String.valueOf(i); 或 s = "" + i;   In Bash 赋值符号(=) 赋值...

巨人站在肩膀上 308

Bash字符串处理(与Java对照) - 12.字符串连接

Bash字符串处理(与Java对照) - 12.字符串连接 In Java String.concat String     concat(String str)           将指定字符串联到此字符串的结尾。   String newStr = str.concat(str2);   StringBuilder.append &amp; StringBuffer...

巨人站在肩膀上 171

Bash字符串处理(与Java对照) - 20.查找子串的位置

Bash字符串处理(与Java对照) - 20.查找子串的位置 In Java String.indexOf  int     indexOf(String str)           返回第一次出现的指定子字符串在此字符串中的索引。  int     indexOf(String str, int fromIndex)           从指定的索引处开始,返回第...

巨人站在肩膀上 328

Bash字符串处理(与Java对照) - 7.字符串与默认值

Bash字符串处理(与Java对照) - 7.字符串与默认值 In Java StringUtils.defaultString 在字符串为null的时候,返回默认值为""或者指定的字符串。主要是为了避免检查null对象。 org.apache.commons.lang.StringUtils defaultString方法 写道 public static String default...

巨人站在肩膀上 346

Bash字符串处理(与Java对照) - 28.去除前后空白

Bash字符串处理(与Java对照) - 28.去除前后空白 In Java String     trim()           返回字符串的副本,忽略前导空白和尾部空白。   In Bash 使用echo命令去除串中的空白 echo $STR 注意 $STR 不要带引号。因为 $STR 展开后,会作为 echo 的参数。那么 echo 在处理参数的时候,自然会...

巨人站在肩膀上 304

Bash字符串处理(与Java对照) - 18.格式化字符串

Bash字符串处理(与Java对照) - 18.格式化字符串 In Java class Formatter 参见:http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax   String.format static String     format(String format,...

巨人站在肩膀上 446

Bash字符串处理(与Java对照) - 21.字符串正则匹配

Bash字符串处理(与Java对照) - 21.字符串正则匹配 In Java 正则表达式查询 String.matches方法 boolean     matches(String regex)           通知此字符串是否匹配给定的正则表达式。 String str = "123456"; String re = "\\d+"; if (str.matc...

巨人站在肩膀上 524
上一篇: Bash字符串处理(与Java对照) - 3.给(字符串)变量赋值
下一篇: 推荐一篇学习Vim使用的好文:酷壳 - 简明 Vim 练级攻略
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值